summaryrefslogtreecommitdiff
path: root/Build
diff options
context:
space:
mode:
Diffstat (limited to 'Build')
-rw-r--r--Build/source/libs/README2
-rw-r--r--Build/source/libs/harfbuzz/ChangeLog5
-rw-r--r--Build/source/libs/harfbuzz/Makefile.am20
-rw-r--r--Build/source/libs/harfbuzz/Makefile.in66
-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.txt14
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog5033
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/NEWS15
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/config.h.in32
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/configure.ac3
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/gtk-doc.make1
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am6
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources239
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/dump-indic-data.cc2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/dump-khmer-data.cc2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/dump-myanmar-data.cc2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/dump-use-data.cc2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-fdsc-table.hh126
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-ankr-table.hh14
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-bsln-table.hh15
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh180
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-feat-table.hh48
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-just-table.hh28
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh131
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-lcar-table.hh16
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh118
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-trak-table.hh40
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.cc40
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.h24
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.hh11
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-ltag-table.hh8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-map.hh7
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-array.hh274
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-atomic.hh30
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.hh41
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-serialize.cc4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc68
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh105
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cache.hh10
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff-interp-common.hh744
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff-interp-cs-common.hh904
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff-interp-dict-common.hh294
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff1-interp-cs.hh161
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff2-interp-cs.hh271
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc29
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc20
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh24
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-deprecated.h61
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc289
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-dsalgs.hh277
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc17
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.hh10
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc6
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.hh222
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc20
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-glib.cc8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-enums.cc.tmpl2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-enums.h.tmpl2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-structs.cc2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-icu.cc8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-iter.hh149
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-kern.hh8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-machinery.hh363
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.cc4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.hh56
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-mutex.hh12
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-null.hh79
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-object.hh38
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file.hh118
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type.hh294
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff-common.hh711
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff1-table.cc385
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff1-table.hh1300
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff2-table.cc136
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff2-table.hh565
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh190
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cbdt-table.hh44
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-colr-table.hh20
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cpal-table.hh57
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-sbix-table.hh61
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-svg-table.hh34
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color.h2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-deprecated.h107
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-face.cc4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-face.hh4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc14
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-gasp-table.hh84
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-glyf-table.hh46
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hdmx-table.hh42
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-head-table.hh19
-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.hh44
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh58
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-base-table.hh107
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common.hh613
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gdef-table.hh146
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh225
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsub-table.hh529
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh392
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-jstf-table.hh46
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc9
-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-map.hh40
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-math-table.hh147
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-maxp-table.hh17
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name-table.hh35
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name.cc10
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name.h2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh150
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-post-table.hh37
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-fallback.hh23
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc10
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-khmer.cc25
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.hh8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-stat-table.hh54
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag.cc4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-avar-table.hh10
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-fvar-table.hh58
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-hvar-table.hh27
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-mvar-table.hh12
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var.h2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-vorg-table.hh26
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot.h1
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set-digest.hh55
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.cc4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.hh124
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.cc2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.hh5
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape.cc20
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper-list.hh8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper.cc18
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper.hh12
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-static.cc4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.cc226
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.hh992
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff1.cc1108
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff1.hh38
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff2.cc624
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff2.hh38
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.cc15
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.hh1
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc20
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.hh13
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.cc26
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.h5
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.hh7
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc10
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode.cc64
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode.hh26
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-uniscribe.cc32
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-utf.hh54
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-vector.hh98
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb.hh40
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/test-name-table.cc6
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/test-unicode-ranges.cc4
-rw-r--r--Build/source/libs/harfbuzz/include/Makefile.am1
-rw-r--r--Build/source/libs/harfbuzz/include/Makefile.in16
-rw-r--r--Build/source/libs/harfbuzz/version.ac2
162 files changed, 17911 insertions, 3828 deletions
diff --git a/Build/source/libs/README b/Build/source/libs/README
index 938d6ce163a..8f019cf444d 100644
--- a/Build/source/libs/README
+++ b/Build/source/libs/README
@@ -25,7 +25,7 @@ graphite2 1.3.13 - checked 21dec18
http://sourceforge.net/projects/silgraphite/files/graphite2/
(requires C++11)
-harfbuzz 2.2.0 - checked 30nov18
+harfbuzz 2.3.0 - checked 22dec18
http://www.freedesktop.org/software/harfbuzz/release/
icu 61.1 - checked 29mar18
diff --git a/Build/source/libs/harfbuzz/ChangeLog b/Build/source/libs/harfbuzz/ChangeLog
index 879151eddd5..ce3909402fa 100644
--- a/Build/source/libs/harfbuzz/ChangeLog
+++ b/Build/source/libs/harfbuzz/ChangeLog
@@ -1,3 +1,8 @@
+2018-12-22 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ Import harfbuzz-2.3.0.
+ * version.ac, Makefile.am, include/Makefile.am: Adjusted.
+
2018-11-30 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
Import harfbuzz-2.2.0.
diff --git a/Build/source/libs/harfbuzz/Makefile.am b/Build/source/libs/harfbuzz/Makefile.am
index 8ce471d1b73..0e666d65d1e 100644
--- a/Build/source/libs/harfbuzz/Makefile.am
+++ b/Build/source/libs/harfbuzz/Makefile.am
@@ -38,6 +38,11 @@ libharfbuzz_a_SOURCES = \
@HARFBUZZ_TREE@/src/hb-buffer-serialize.cc \
@HARFBUZZ_TREE@/src/hb-buffer.cc \
@HARFBUZZ_TREE@/src/hb-cache.hh \
+ @HARFBUZZ_TREE@/src/hb-cff-interp-common.hh \
+ @HARFBUZZ_TREE@/src/hb-cff-interp-cs-common.hh \
+ @HARFBUZZ_TREE@/src/hb-cff-interp-dict-common.hh \
+ @HARFBUZZ_TREE@/src/hb-cff1-interp-cs.hh \
+ @HARFBUZZ_TREE@/src/hb-cff2-interp-cs.hh \
@HARFBUZZ_TREE@/src/hb-common.cc \
@HARFBUZZ_TREE@/src/hb-debug.hh \
@HARFBUZZ_TREE@/src/hb-dsalgs.hh \
@@ -45,7 +50,6 @@ libharfbuzz_a_SOURCES = \
@HARFBUZZ_TREE@/src/hb-face.cc \
@HARFBUZZ_TREE@/src/hb-font.hh \
@HARFBUZZ_TREE@/src/hb-font.cc \
- @HARFBUZZ_TREE@/src/hb-iter.hh \
@HARFBUZZ_TREE@/src/hb-kern.hh \
@HARFBUZZ_TREE@/src/hb-map.hh \
@HARFBUZZ_TREE@/src/hb-map.cc \
@@ -55,6 +59,12 @@ libharfbuzz_a_SOURCES = \
@HARFBUZZ_TREE@/src/hb-object.hh \
@HARFBUZZ_TREE@/src/hb-open-file.hh \
@HARFBUZZ_TREE@/src/hb-open-type.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-cff-common.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-cff1-table.cc \
+ @HARFBUZZ_TREE@/src/hb-ot-cff1-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-cff2-table.cc \
+ @HARFBUZZ_TREE@/src/hb-ot-cff2-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-gasp-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-color-cbdt-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-cmap-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-face.cc \
@@ -89,6 +99,12 @@ libharfbuzz_a_SOURCES = \
@HARFBUZZ_TREE@/src/hb-shaper.cc \
@HARFBUZZ_TREE@/src/hb-static.cc \
@HARFBUZZ_TREE@/src/hb-string-array.hh \
+ @HARFBUZZ_TREE@/src/hb-subset-cff-common.cc \
+ @HARFBUZZ_TREE@/src/hb-subset-cff-common.hh \
+ @HARFBUZZ_TREE@/src/hb-subset-cff1.cc \
+ @HARFBUZZ_TREE@/src/hb-subset-cff1.hh \
+ @HARFBUZZ_TREE@/src/hb-subset-cff2.cc \
+ @HARFBUZZ_TREE@/src/hb-subset-cff2.hh \
@HARFBUZZ_TREE@/src/hb-subset-input.hh \
@HARFBUZZ_TREE@/src/hb-subset.hh \
@HARFBUZZ_TREE@/src/hb-unicode.hh \
@@ -104,6 +120,7 @@ libharfbuzz_a_SOURCES = \
## native OpenType Layout backend
libharfbuzz_a_SOURCES += \
+ @HARFBUZZ_TREE@/src/hb-aat-fdsc-table.hh \
@HARFBUZZ_TREE@/src/hb-aat-layout.cc \
@HARFBUZZ_TREE@/src/hb-aat-layout-common.hh \
@HARFBUZZ_TREE@/src/hb-aat-layout-ankr-table.hh \
@@ -118,6 +135,7 @@ libharfbuzz_a_SOURCES += \
@HARFBUZZ_TREE@/src/hb-aat-ltag-table.hh \
@HARFBUZZ_TREE@/src/hb-aat-map.cc \
@HARFBUZZ_TREE@/src/hb-aat-map.hh \
+ @HARFBUZZ_TREE@/src/hb-array.hh \
@HARFBUZZ_TREE@/src/hb-ot-font.cc \
@HARFBUZZ_TREE@/src/hb-ot-layout.cc \
@HARFBUZZ_TREE@/src/hb-ot-layout-base-table.hh \
diff --git a/Build/source/libs/harfbuzz/Makefile.in b/Build/source/libs/harfbuzz/Makefile.in
index 2b4e8660154..c3f835233ae 100644
--- a/Build/source/libs/harfbuzz/Makefile.in
+++ b/Build/source/libs/harfbuzz/Makefile.in
@@ -127,6 +127,8 @@ am_libharfbuzz_a_OBJECTS = @HARFBUZZ_TREE@/src/hb-blob.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-face.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-font.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-map.$(OBJEXT) \
+ @HARFBUZZ_TREE@/src/hb-ot-cff1-table.$(OBJEXT) \
+ @HARFBUZZ_TREE@/src/hb-ot-cff2-table.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-ot-face.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-ot-name-language.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-ot-name.$(OBJEXT) \
@@ -136,6 +138,9 @@ am_libharfbuzz_a_OBJECTS = @HARFBUZZ_TREE@/src/hb-blob.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-shape-plan.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-shaper.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-static.$(OBJEXT) \
+ @HARFBUZZ_TREE@/src/hb-subset-cff-common.$(OBJEXT) \
+ @HARFBUZZ_TREE@/src/hb-subset-cff1.$(OBJEXT) \
+ @HARFBUZZ_TREE@/src/hb-subset-cff2.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-unicode.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-warning.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-fallback-shape.$(OBJEXT) \
@@ -201,6 +206,8 @@ am__depfiles_remade = ./$(DEPDIR)/hbtest-dummy.Po \
@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-graphite2.Po \
@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-icu.Po \
@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-map.Po \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-cff1-table.Po \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-cff2-table.Po \
@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-color.Po \
@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-face.Po \
@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-font.Po \
@@ -231,6 +238,9 @@ am__depfiles_remade = ./$(DEPDIR)/hbtest-dummy.Po \
@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shape.Po \
@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shaper.Po \
@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-static.Po \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff-common.Po \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff1.Po \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff2.Po \
@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-unicode.Po \
@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-warning.Po
am__mv = mv -f
@@ -710,18 +720,29 @@ libharfbuzz_a_SOURCES = @HARFBUZZ_TREE@/src/hb-atomic.hh \
@HARFBUZZ_TREE@/src/hb-buffer-serialize.cc \
@HARFBUZZ_TREE@/src/hb-buffer.cc \
@HARFBUZZ_TREE@/src/hb-cache.hh \
+ @HARFBUZZ_TREE@/src/hb-cff-interp-common.hh \
+ @HARFBUZZ_TREE@/src/hb-cff-interp-cs-common.hh \
+ @HARFBUZZ_TREE@/src/hb-cff-interp-dict-common.hh \
+ @HARFBUZZ_TREE@/src/hb-cff1-interp-cs.hh \
+ @HARFBUZZ_TREE@/src/hb-cff2-interp-cs.hh \
@HARFBUZZ_TREE@/src/hb-common.cc \
@HARFBUZZ_TREE@/src/hb-debug.hh \
@HARFBUZZ_TREE@/src/hb-dsalgs.hh \
@HARFBUZZ_TREE@/src/hb-face.hh @HARFBUZZ_TREE@/src/hb-face.cc \
@HARFBUZZ_TREE@/src/hb-font.hh @HARFBUZZ_TREE@/src/hb-font.cc \
- @HARFBUZZ_TREE@/src/hb-iter.hh @HARFBUZZ_TREE@/src/hb-kern.hh \
- @HARFBUZZ_TREE@/src/hb-map.hh @HARFBUZZ_TREE@/src/hb-map.cc \
+ @HARFBUZZ_TREE@/src/hb-kern.hh @HARFBUZZ_TREE@/src/hb-map.hh \
+ @HARFBUZZ_TREE@/src/hb-map.cc \
@HARFBUZZ_TREE@/src/hb-machinery.hh \
@HARFBUZZ_TREE@/src/hb-mutex.hh @HARFBUZZ_TREE@/src/hb-null.hh \
@HARFBUZZ_TREE@/src/hb-object.hh \
@HARFBUZZ_TREE@/src/hb-open-file.hh \
@HARFBUZZ_TREE@/src/hb-open-type.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-cff-common.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-cff1-table.cc \
+ @HARFBUZZ_TREE@/src/hb-ot-cff1-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-cff2-table.cc \
+ @HARFBUZZ_TREE@/src/hb-ot-cff2-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-gasp-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-color-cbdt-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-cmap-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-face.cc \
@@ -755,6 +776,12 @@ libharfbuzz_a_SOURCES = @HARFBUZZ_TREE@/src/hb-atomic.hh \
@HARFBUZZ_TREE@/src/hb-shaper.cc \
@HARFBUZZ_TREE@/src/hb-static.cc \
@HARFBUZZ_TREE@/src/hb-string-array.hh \
+ @HARFBUZZ_TREE@/src/hb-subset-cff-common.cc \
+ @HARFBUZZ_TREE@/src/hb-subset-cff-common.hh \
+ @HARFBUZZ_TREE@/src/hb-subset-cff1.cc \
+ @HARFBUZZ_TREE@/src/hb-subset-cff1.hh \
+ @HARFBUZZ_TREE@/src/hb-subset-cff2.cc \
+ @HARFBUZZ_TREE@/src/hb-subset-cff2.hh \
@HARFBUZZ_TREE@/src/hb-subset-input.hh \
@HARFBUZZ_TREE@/src/hb-subset.hh \
@HARFBUZZ_TREE@/src/hb-unicode.hh \
@@ -765,7 +792,9 @@ libharfbuzz_a_SOURCES = @HARFBUZZ_TREE@/src/hb-atomic.hh \
@HARFBUZZ_TREE@/src/hb-buffer-deserialize-json.hh \
@HARFBUZZ_TREE@/src/hb-buffer-deserialize-text.hh \
@HARFBUZZ_TREE@/src/hb-fallback-shape.cc \
- @HARFBUZZ_TREE@/src/hb.hh @HARFBUZZ_TREE@/src/hb-aat-layout.cc \
+ @HARFBUZZ_TREE@/src/hb.hh \
+ @HARFBUZZ_TREE@/src/hb-aat-fdsc-table.hh \
+ @HARFBUZZ_TREE@/src/hb-aat-layout.cc \
@HARFBUZZ_TREE@/src/hb-aat-layout-common.hh \
@HARFBUZZ_TREE@/src/hb-aat-layout-ankr-table.hh \
@HARFBUZZ_TREE@/src/hb-aat-layout-bsln-table.hh \
@@ -779,6 +808,7 @@ libharfbuzz_a_SOURCES = @HARFBUZZ_TREE@/src/hb-atomic.hh \
@HARFBUZZ_TREE@/src/hb-aat-ltag-table.hh \
@HARFBUZZ_TREE@/src/hb-aat-map.cc \
@HARFBUZZ_TREE@/src/hb-aat-map.hh \
+ @HARFBUZZ_TREE@/src/hb-array.hh \
@HARFBUZZ_TREE@/src/hb-ot-font.cc \
@HARFBUZZ_TREE@/src/hb-ot-layout.cc \
@HARFBUZZ_TREE@/src/hb-ot-layout-base-table.hh \
@@ -944,6 +974,12 @@ clean-noinstLIBRARIES:
@HARFBUZZ_TREE@/src/hb-map.$(OBJEXT): \
@HARFBUZZ_TREE@/src/$(am__dirstamp) \
@HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+@HARFBUZZ_TREE@/src/hb-ot-cff1-table.$(OBJEXT): \
+ @HARFBUZZ_TREE@/src/$(am__dirstamp) \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+@HARFBUZZ_TREE@/src/hb-ot-cff2-table.$(OBJEXT): \
+ @HARFBUZZ_TREE@/src/$(am__dirstamp) \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@HARFBUZZ_TREE@/src/hb-ot-face.$(OBJEXT): \
@HARFBUZZ_TREE@/src/$(am__dirstamp) \
@HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@@ -971,6 +1007,15 @@ clean-noinstLIBRARIES:
@HARFBUZZ_TREE@/src/hb-static.$(OBJEXT): \
@HARFBUZZ_TREE@/src/$(am__dirstamp) \
@HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+@HARFBUZZ_TREE@/src/hb-subset-cff-common.$(OBJEXT): \
+ @HARFBUZZ_TREE@/src/$(am__dirstamp) \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+@HARFBUZZ_TREE@/src/hb-subset-cff1.$(OBJEXT): \
+ @HARFBUZZ_TREE@/src/$(am__dirstamp) \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+@HARFBUZZ_TREE@/src/hb-subset-cff2.$(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)
@@ -1086,6 +1131,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-graphite2.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-icu.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-map.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-cff1-table.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-cff2-table.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-color.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-face.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-font.Po@am__quote@ # am--include-marker
@@ -1116,6 +1163,9 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shape.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shaper.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-static.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff-common.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff1.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff2.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-unicode.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-warning.Po@am__quote@ # am--include-marker
@@ -1723,6 +1773,8 @@ distclean: distclean-recursive
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-graphite2.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-icu.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-map.Po
+ -rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-cff1-table.Po
+ -rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-cff2-table.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-color.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-face.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-font.Po
@@ -1753,6 +1805,9 @@ distclean: distclean-recursive
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shape.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shaper.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-static.Po
+ -rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff-common.Po
+ -rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff1.Po
+ -rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff2.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-unicode.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-warning.Po
-rm -f Makefile
@@ -1816,6 +1871,8 @@ maintainer-clean: maintainer-clean-recursive
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-graphite2.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-icu.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-map.Po
+ -rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-cff1-table.Po
+ -rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-cff2-table.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-color.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-face.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-font.Po
@@ -1846,6 +1903,9 @@ maintainer-clean: maintainer-clean-recursive
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shape.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shaper.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-static.Po
+ -rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff-common.Po
+ -rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff1.Po
+ -rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff2.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-unicode.Po
-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-warning.Po
-rm -f Makefile
diff --git a/Build/source/libs/harfbuzz/TLpatches/ChangeLog b/Build/source/libs/harfbuzz/TLpatches/ChangeLog
index 04eafb87164..9c359303c5c 100644
--- a/Build/source/libs/harfbuzz/TLpatches/ChangeLog
+++ b/Build/source/libs/harfbuzz/TLpatches/ChangeLog
@@ -1,3 +1,8 @@
+2018-12-22 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ Imported harfbuzz-2.3.0 source tree from:
+ http://www.freedesktop.org/software/harfbuzz/release/
+
2018-11-30 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
Imported harfbuzz-2.2.0 source tree from:
diff --git a/Build/source/libs/harfbuzz/TLpatches/TL-Changes b/Build/source/libs/harfbuzz/TLpatches/TL-Changes
index ce348915506..c25f50191e8 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-2.2.0/ tree as obtained from:
+Changes applied to the harfbuzz-2.3.0/ 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 8b4f98cc176..b7075bddd05 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) 2.2.0.
+# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 2.3.0.
#
# 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='2.2.0'
-PACKAGE_STRING='harfbuzz (TeX Live) 2.2.0'
+PACKAGE_VERSION='2.3.0'
+PACKAGE_STRING='harfbuzz (TeX Live) 2.3.0'
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) 2.2.0 to adapt to many kinds of systems.
+\`configure' configures harfbuzz (TeX Live) 2.3.0 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) 2.2.0:";;
+ short | recursive ) echo "Configuration of harfbuzz (TeX Live) 2.3.0:";;
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 2.2.0
+harfbuzz (TeX Live) configure 2.3.0
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2131,7 +2131,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 2.2.0, which was
+It was created by harfbuzz (TeX Live) $as_me 2.3.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -4054,7 +4054,7 @@ fi
# Define the identity of the package.
PACKAGE='harfbuzz--tex-live-'
- VERSION='2.2.0'
+ VERSION='2.3.0'
# Some tools Automake needs.
@@ -4247,9 +4247,9 @@ WARNING_CFLAGS=$kpse_cv_warning_cflags
HB_VERSION_MAJOR=2
-HB_VERSION_MINOR=2
+HB_VERSION_MINOR=3
HB_VERSION_MICRO=0
-HB_VERSION=2.2.0
+HB_VERSION=2.3.0
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -8143,7 +8143,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 2.2.0, which was
+This file was extended by harfbuzz (TeX Live) $as_me 2.3.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -8209,7 +8209,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 2.2.0
+harfbuzz (TeX Live) config.status 2.3.0
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 019e205bc63..b6241e93772 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt
@@ -168,10 +168,6 @@ extract_make_variable(HB_BASE_headers ${SRCSOURCES})
add_prefix_to_list(HB_BASE_headers "${PROJECT_SOURCE_DIR}/src/")
extract_make_variable(HB_FALLBACK_sources ${SRCSOURCES})
add_prefix_to_list(HB_FALLBACK_sources "${PROJECT_SOURCE_DIR}/src/")
-extract_make_variable(HB_OT_sources ${SRCSOURCES})
-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/")
@@ -180,13 +176,10 @@ 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)
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 ()
extract_make_variable(HB_VIEW_sources ${UTILSOURCES})
@@ -212,7 +205,7 @@ set (HB_VERSION_MICRO ${CMAKE_MATCH_4})
## Define ragel tasks
# if (NOT IN_HB_DIST)
-# foreach (ragel_output IN ITEMS ${HB_BASE_RAGEL_GENERATED_sources} ${HB_OT_RAGEL_GENERATED_sources})
+# foreach (ragel_output IN ITEMS ${HB_BASE_RAGEL_GENERATED_sources})
# string(REGEX MATCH "([^/]+)\\.hh" temp ${ragel_output})
# set (target_name ${CMAKE_MATCH_1})
# add_custom_command(OUTPUT ${ragel_output}
@@ -246,8 +239,6 @@ set (project_sources
${HB_BASE_RAGEL_GENERATED_sources}
${HB_FALLBACK_sources}
- ${HB_OT_sources}
- ${HB_OT_RAGEL_GENERATED_sources}
)
set (subset_project_sources
@@ -260,7 +251,6 @@ set (project_headers
#${HB_VERSION_H}
${HB_BASE_headers}
- ${HB_OT_headers}
)
set (subset_project_headers
@@ -706,6 +696,8 @@ if (HB_HAVE_INTROSPECTION)
-DHB_H_IN
-DHB_OT_H
-DHB_OT_H_IN
+ -DHB_AAT_H
+ -DHB_AAT_H_IN
-DHB_GOBJECT_H
-DHB_GOBJECT_H_IN
-DHB_EXTERN=
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog b/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
index e6e9cd1ea96..35148210668 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
@@ -1,3 +1,2646 @@
+commit 87f7c83fffb7e64970be23c8e3c620d32a3b8f5b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 20 15:54:17 2018 -0500
+
+ [serializer] Add operator <<
+
+ Not sure if we are going to use it. But might incentivize us to.
+
+ src/hb-machinery.hh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 5b70074edf1c12a9442037d54c03d3025bd93995
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 20 15:38:59 2018 -0500
+
+ Add hb_assign(obj, value)
+
+ src/hb-machinery.hh | 2 +-
+ src/hb-null.hh | 24 +++++++++++++++++++++++-
+ src/hb-open-type.hh | 5 +++--
+ 3 files changed, 27 insertions(+), 4 deletions(-)
+
+commit 6124123393eabb77d34830c971ec463998d50aba
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 20 12:26:30 2018 -0500
+
+ [serialize] Adjust ClassDef
+
+ [skip ci]
+
+ src/hb-ot-layout-common.hh | 32 ++++++++++++++++----------------
+ 1 file changed, 16 insertions(+), 16 deletions(-)
+
+commit 4220b7bdd7706622563401bf8f055c4b1482b4e5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 20 11:48:45 2018 -0500
+
+ Fix code on big-endian gcc / clang
+
+ Ouch! We need a bigendian bot...
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/1498
+
+ src/hb-machinery.hh | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit c87ee72232416099a73b563ca7aaf293b1c87b2a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Dec 19 22:28:16 2018 -0500
+
+ Minor [skip ci]
+
+ src/hb-dsalgs.hh | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+commit 5000a59a6391d588c2cbdda132839b1fb1f75bf2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Dec 19 21:07:53 2018 -0500
+
+ [saitnize] Minor
+
+ src/hb-machinery.hh | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit 3ee4ea945674c4b96c9aa6b0367bbf22dc8745d1
+Author: fanc999 <fanc999@yahoo.com.tw>
+Date: Thu Dec 20 11:26:54 2018 +0800
+
+ Fix build on older Visual Studio versions (#1499)
+
+ * src/hb-cff-interp-dict-common.hh: Use ull for unsigned int64_t
+
+ The llu suffix does not work for older Visual Studio versions
+ (pre-2013), but ull works for all the compilers that we attempt to
+ support.
+
+ * test/api: Fix build on pre-C99 compilers
+
+ Ensure variables are declared at the top of the block.
+
+ * src/hb-dsalgs.hh: Add specialization for hb_is_signed<> for __int8
+
+ Pre-Visual Studio 2010 does not consider __int8 (which is typedef'ed
+ to
+ int8_t) to be equivilant to signed char, so the compiler cannot
+ find the
+ corresponding hb_is_signed<> specialization that is needed.
+
+ The interesting thing is unsigned __int8 is considered to be
+ equivilant
+ to unsigned char, so as the other types (short, int, long) that
+ we look
+ for here, so only the specialization for __int8 is added here.
+
+ This will fix builds on Visual Studio 2008 at least.
+
+ src/hb-cff-interp-dict-common.hh | 2 +-
+ src/hb-dsalgs.hh | 9 +++++++++
+ test/api/test-aat-layout.c | 3 ++-
+ test/api/test-subset-cff1.c | 12 ++++++++----
+ 4 files changed, 20 insertions(+), 6 deletions(-)
+
+commit a62870506d16949582bf0b54e3dc8846b9747a4a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Dec 19 21:05:00 2018 -0500
+
+ [sanitize] Use hb_static_size instead of ::static_size
+
+ https://github.com/harfbuzz/harfbuzz/issues/1496#issuecomment-448818112
+
+ src/hb-machinery.hh | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+commit 0c9cd5d5f4d96df77e4298e16c786e67b83f9bc4
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Dec 19 21:18:30 2018 +0330
+
+ [test] Fix test-name-table.cc leak issue
+
+ Spotted it accidentally but wanted to see if is anything serious so
+ went for fixing it
+
+ src/test-name-table.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 3d9d7dc4dd4be8e746507282569504b511afa709
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Dec 18 22:11:23 2018 -0500
+
+ [arrays] Add hb_ubytes_t for unsigned char
+
+ src/hb-array.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit f1e95e40edc871c840abe8a8a695efc252af40f5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Dec 18 16:49:08 2018 -0500
+
+ [arrays] Remove hb_supplier_t<>
+
+ src/hb-array.hh | 11 --
+ src/hb-cff2-interp-cs.hh | 2 +-
+ src/hb-face.cc | 6 +-
+ src/hb-open-file.hh | 15 +-
+ src/hb-open-type.hh | 18 +-
+ src/hb-ot-cmap-table.hh | 3 +-
+ src/hb-ot-layout-common.hh | 104 ++++--------
+ src/hb-ot-layout-gsub-table.hh | 257
+ +++++++++++++----------------
+ src/hb-ot-shape-complex-arabic-fallback.hh | 23 +--
+ 9 files changed, 170 insertions(+), 269 deletions(-)
+
+commit f9417af29bd5a1d2f5b55389a1cc6f4280b347d8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Dec 18 13:23:32 2018 -0500
+
+ [serialize] Propagate error from hb-face
+
+ src/hb-face.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 9aebfb418222427a324d911b32abfc11256ca9e3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Dec 18 13:22:17 2018 -0500
+
+ [serialize] Streamline error propagation
+
+ src/hb-buffer.hh | 2 ++
+ src/hb-machinery.hh | 35 ++++++++++++++++++++++++++---------
+ src/hb-map.hh | 2 ++
+ src/hb-ot-layout-common.hh | 4 ++--
+ src/hb-ot-layout-gsub-table.hh | 4 ++--
+ src/hb-set.hh | 2 ++
+ src/hb-subset.cc | 2 +-
+ 7 files changed, 37 insertions(+), 14 deletions(-)
+
+commit 969ff3c7aadbe721cdd414488eb170433f10d00c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 22:43:00 2018 -0500
+
+ Remove unused hb-iter.hh
+
+ The ideas there are all part of hb-array.hh now. To be determined
+ how we
+ want to use generic iterator patterns.
+
+ src/Makefile.sources | 1 -
+ src/hb-iter.hh | 146
+ ---------------------------------------------------
+ src/hb-machinery.hh | 1 -
+ 3 files changed, 148 deletions(-)
+
+commit b1094fc2d2b614c1407b502d15bd98407a5ffb56
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 22:41:04 2018 -0500
+
+ [arrays] Minor tweaks to hb_supplier_t
+
+ I think I like to keep this hb_supplier_t thing separately from
+ hb_array_t.
+
+ src/hb-array.hh | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit cf39c242057636feebafce347f8e7ac2b305112a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 22:36:23 2018 -0500
+
+ [arrays] Rename Supplier to hb_supplier_t
+
+ src/hb-array.hh | 6 +-
+ src/hb-face.cc | 2 +-
+ src/hb-open-file.hh | 4 +-
+ src/hb-open-type.hh | 4 +-
+ src/hb-ot-cmap-table.hh | 2 +-
+ src/hb-ot-layout-common.hh | 34 ++++-----
+ src/hb-ot-layout-gsub-table.hh | 108
+ ++++++++++++++---------------
+ src/hb-ot-shape-complex-arabic-fallback.hh | 14 ++--
+ 8 files changed, 87 insertions(+), 87 deletions(-)
+
+commit 6b5eaa753047b6b0389cb7521c52efbaccf72daf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 21:55:33 2018 -0500
+
+ Hide hb_addressof()
+
+ src/hb-dsalgs.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6befa75cdf83d561de69fb342f68694cd7b46f5e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 20:34:51 2018 -0500
+
+ Enable __builtin_* on clang
+
+ We'll see which old clang versions this breaks...
+
+ src/hb-dsalgs.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 8d2d41025619e24160ed80edd1c413168a2dda36
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 20:23:26 2018 -0500
+
+ Add hb_addressof() and use it to fix bug after hb_bytes_t merge
+
+ We cannot take address hb_bytes_t direction. We need to use the
+ newly added hb_addressof(), ala std::addressof().
+
+ src/hb-dsalgs.hh | 9 +++++++++
+ src/hb-ot-post-table.hh | 3 ++-
+ 2 files changed, 11 insertions(+), 1 deletion(-)
+
+commit 49334f9b509fc15e8baa93d49b86886ca933de04
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 18:27:36 2018 -0500
+
+ Enable system extensions in hb.hh
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/1491
+
+ configure.ac | 1 -
+ src/hb.hh | 26 ++++++++++++++++++++++++++
+ 2 files changed, 26 insertions(+), 1 deletion(-)
+
+commit 37c14bc7459e8b9cc0840b68223123ffb950b4cc
+Author: prrace <philip.race@oracle.com>
+Date: Mon Dec 17 14:59:37 2018 -0800
+
+ Fix Solaris use after free (#1495)
+
+ src/hb-atomic.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 483f2491e40ccf660836ed2797738297e40bd100
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 17:56:10 2018 -0500
+
+ Remove define GNU_SOURCE
+
+ Not needed. We get it in our config.h automatically thanks to
+ AC_USE_SYSTEM_EXTENSIONS. Let's see whose build it breaks...
+ If we end up putting it back, we should add other things from
+ that macro and remove the macro.
+
+ src/hb.hh | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 87ff65aea117391c732d51d874964b3e32d6fa94
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 17:19:42 2018 -0500
+
+ Fix more warnings
+
+ src/hb.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f9d219a17417f61fa2c6152d2181504866583a72
+Author: prrace <philip.race@oracle.com>
+Date: Mon Dec 17 14:18:47 2018 -0800
+
+ Fix Solaris Trailing comma in enum warnings (#1490)
+
+ src/hb-ot-color.h | 2 +-
+ src/hb-ot-name.h | 2 +-
+ src/hb-ot-var.h | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 244a8627f7b0ed651d6010c7ee7e54fa8fcca400
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Dec 17 21:31:43 2018 +0330
+
+ Lower coretext_aat shaper priority (#1488)
+
+ Related to https://github.com/harfbuzz/harfbuzz/issues/1478
+
+ src/hb-shaper-list.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit e41200859997ccf8fd7d36fff654f3ceea3a4160
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Dec 17 21:31:01 2018 +0330
+
+ Remove redundant void from C++ sources (#1486)
+
+ src/dump-indic-data.cc | 2 +-
+ src/dump-khmer-data.cc | 2 +-
+ src/dump-myanmar-data.cc | 2 +-
+ src/dump-use-data.cc | 2 +-
+ src/hb-aat-fdsc-table.hh | 4 +-
+ src/hb-aat-layout-common.hh | 23 +++---
+ src/hb-aat-layout-feat-table.hh | 8 +--
+ src/hb-aat-layout-just-table.hh | 2 +-
+ src/hb-aat-layout-kerx-table.hh | 21 +++---
+ src/hb-aat-layout-morx-table.hh | 10 +--
+ src/hb-aat-layout-trak-table.hh | 4 +-
+ src/hb-aat-layout.cc | 6 +-
+ src/hb-aat-map.hh | 4 +-
+ src/hb-array.hh | 24 +++----
+ src/hb-atomic.hh | 18 ++---
+ src/hb-blob.cc | 8 +--
+ src/hb-blob.hh | 33 ++++-----
+ src/hb-buffer-serialize.cc | 2 +-
+ src/hb-buffer.cc | 24 +++----
+ src/hb-buffer.hh | 51 ++++++-------
+ src/hb-cache.hh | 6 +-
+ src/hb-cff-interp-common.hh | 113 +++++++++++++----------------
+ src/hb-cff-interp-cs-common.hh | 26 +++----
+ src/hb-cff-interp-dict-common.hh | 12 ++--
+ src/hb-cff1-interp-cs.hh | 4 +-
+ src/hb-cff2-interp-cs.hh | 24 +++----
+ src/hb-common.cc | 20 +++---
+ src/hb-coretext.cc | 2 +-
+ src/hb-debug.hh | 6 +-
+ src/hb-directwrite.cc | 16 ++---
+ src/hb-dsalgs.hh | 2 +-
+ src/hb-face.cc | 6 +-
+ src/hb-face.hh | 8 +--
+ src/hb-font.cc | 6 +-
+ src/hb-font.hh | 6 +-
+ src/hb-ft.cc | 18 ++---
+ src/hb-glib.cc | 8 +--
+ src/hb-gobject-enums.cc.tmpl | 2 +-
+ src/hb-gobject-enums.h.tmpl | 2 +-
+ src/hb-gobject-structs.cc | 2 +-
+ src/hb-icu.cc | 8 +--
+ src/hb-iter.hh | 15 ++--
+ src/hb-machinery.hh | 150
+ ++++++++++++++++-----------------------
+ src/hb-map.cc | 4 +-
+ src/hb-map.hh | 24 +++----
+ src/hb-mutex.hh | 10 +--
+ src/hb-null.hh | 32 ++++-----
+ src/hb-object.hh | 22 +++---
+ src/hb-open-file.hh | 32 ++++-----
+ src/hb-open-type.hh | 66 +++++++++--------
+ src/hb-ot-cff-common.hh | 30 ++++----
+ src/hb-ot-cff1-table.cc | 17 ++---
+ src/hb-ot-cff1-table.hh | 52 ++++++--------
+ src/hb-ot-cff2-table.cc | 8 +--
+ src/hb-ot-cff2-table.hh | 34 ++++-----
+ src/hb-ot-cmap-table.hh | 10 +--
+ src/hb-ot-color-cbdt-table.hh | 4 +-
+ src/hb-ot-color-colr-table.hh | 2 +-
+ src/hb-ot-color-cpal-table.hh | 10 +--
+ src/hb-ot-color-sbix-table.hh | 11 ++-
+ src/hb-ot-color-svg-table.hh | 7 +-
+ src/hb-ot-face.cc | 2 +-
+ src/hb-ot-face.hh | 2 +-
+ src/hb-ot-font.cc | 8 +--
+ src/hb-ot-glyf-table.hh | 6 +-
+ src/hb-ot-hdmx-table.hh | 4 +-
+ src/hb-ot-head-table.hh | 8 +--
+ src/hb-ot-hmtx-table.hh | 2 +-
+ src/hb-ot-kern-table.hh | 20 +++---
+ src/hb-ot-layout-base-table.hh | 10 +--
+ src/hb-ot-layout-common.hh | 67 +++++++++--------
+ src/hb-ot-layout-gdef-table.hh | 20 +++---
+ src/hb-ot-layout-gpos-table.hh | 34 ++++-----
+ src/hb-ot-layout-gsub-table.hh | 24 +++----
+ src/hb-ot-layout-gsubgpos.hh | 92 +++++++++++-------------
+ src/hb-ot-layout-jstf-table.hh | 8 +--
+ src/hb-ot-map.cc | 2 +-
+ src/hb-ot-map.hh | 8 +--
+ src/hb-ot-math-table.hh | 11 ++-
+ src/hb-ot-maxp-table.hh | 5 +-
+ src/hb-ot-name-table.hh | 6 +-
+ src/hb-ot-os2-table.hh | 18 ++---
+ src/hb-ot-post-table.hh | 4 +-
+ src/hb-ot-shape.cc | 2 +-
+ src/hb-ot-shape.hh | 2 +-
+ src/hb-ot-tag.cc | 4 +-
+ src/hb-ot-var-fvar-table.hh | 9 ++-
+ src/hb-ot-var-hvar-table.hh | 9 +--
+ src/hb-ot-vorg-table.hh | 2 +-
+ src/hb-set-digest.hh | 4 +-
+ src/hb-set.cc | 4 +-
+ src/hb-set.hh | 38 +++++-----
+ src/hb-shape-plan.cc | 2 +-
+ src/hb-shape-plan.hh | 5 +-
+ src/hb-shape.cc | 10 +--
+ src/hb-shaper.cc | 14 ++--
+ src/hb-shaper.hh | 6 +-
+ src/hb-static.cc | 4 +-
+ src/hb-subset-cff-common.hh | 91 +++++++++++-------------
+ src/hb-subset-cff1.cc | 20 ++----
+ src/hb-subset-cff2.cc | 8 +--
+ src/hb-subset-input.cc | 2 +-
+ src/hb-subset.hh | 4 +-
+ src/hb-ucdn.cc | 10 +--
+ src/hb-unicode.cc | 64 ++++++++---------
+ src/hb-uniscribe.cc | 12 ++--
+ src/hb-vector.hh | 38 +++++-----
+ src/hb.hh | 6 +-
+ src/test-unicode-ranges.cc | 4 +-
+ util/ansi-print.cc | 6 +-
+ util/hb-fc.cc | 2 +-
+ util/hb-shape.cc | 5 +-
+ util/helper-cairo.cc | 2 +-
+ util/helper-cairo.hh | 2 +-
+ util/main-font-text.hh | 2 +-
+ util/options.cc | 8 +--
+ util/options.hh | 22 +++---
+ util/view-cairo.hh | 14 ++--
+ 118 files changed, 861 insertions(+), 1024 deletions(-)
+
+commit 7ace10078c23d00da4af0480f91b877faeed3d38
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Dec 17 20:07:04 2018 +0330
+
+ Minor, fix two more ArrayOf incorrect operator logic
+
+ src/hb-open-type.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit a1240383aa82fd88e922a1e751444d14033ae882
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 10:44:14 2018 -0500
+
+ [arrays] Minor fix
+
+ src/hb-open-type.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 381c3548e9022a421bcf88db148cc11f337f3b79
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 00:39:30 2018 -0500
+
+ [array] Add cast operator to add const to Type
+
+ In lieu of constructor removed in previous commit.
+
+ src/hb-array.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 15acf33c228e0c8e0f8cc6a04e566970164dd5f1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 00:38:13 2018 -0500
+
+ [array] Remove problematic constructor
+
+ src/hb-array.hh | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 470369a871791b610e0c42212558e83baeb83409
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 00:20:19 2018 -0500
+
+ [array] Add arithmetic operators
+
+ src/hb-array.hh | 22 ++++++++++++++++++----
+ 1 file changed, 18 insertions(+), 4 deletions(-)
+
+commit 6cd60c2f2aa17e3f02b50c19cf640b3f183f3354
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 00:09:06 2018 -0500
+
+ [array] Return Crap instead of Null if Type is not const
+
+ Ouch!
+
+ src/hb-array.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 94e72cf1c9af563fbf522efb7f2e0b1fcd616418
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 00:06:40 2018 -0500
+
+ [array] Add operator *
+
+ src/hb-array.hh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 68d4a5eee0f248891d20d69b897201d105951aef
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 17 00:02:42 2018 -0500
+
+ [array] Add constructor from fixed-size array
+
+ src/hb-array.hh | 1 +
+ src/hb-iter.hh | 4 ++--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+commit a4354d2fd36377ec8b544c7b88a231cb1273dccd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 23:57:27 2018 -0500
+
+ [array] Organize
+
+ src/hb-array.hh | 75
+ ++++++++++++++++++++++++++++++++++++---------------------
+ 1 file changed, 48 insertions(+), 27 deletions(-)
+
+commit 84c1865821151d83a8798ae11ebba3329a12c560
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 23:52:17 2018 -0500
+
+ [arrays] Reduce Supplier<> even further
+
+ src/hb-array.hh | 24 +++---------------------
+ 1 file changed, 3 insertions(+), 21 deletions(-)
+
+commit 1bcc4fc9f34ab518fc822c9464a73ba3e90f5f1c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 23:47:56 2018 -0500
+
+ Whitespace
+
+ src/hb-ot-shape-complex-arabic-fallback.hh | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit f85f6e815f439075f8c6f5391e5c8dfe77e0f00d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 23:45:07 2018 -0500
+
+ [array] Add operator +=
+
+ src/hb-array.hh | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+commit 7c0e3e9b2b077fced829a10f616ed3d6b51c15c4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 23:43:17 2018 -0500
+
+ [array] Add constructor from hb_array_t<const Type>
+
+ src/hb-array.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 92680361ec68734ad38e2158626feebaf18eec88
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 23:38:51 2018 -0500
+
+ [arrays] Move Supplier<> to hb-array.hh
+
+ src/hb-array.hh | 33 +++++++++++++++++++++++++++++++++
+ src/hb-machinery.hh | 32 --------------------------------
+ 2 files changed, 33 insertions(+), 32 deletions(-)
+
+commit 2a3fa3f82ffdb778a2d21fc01e859579161237c9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 23:33:03 2018 -0500
+
+ [arrays] Remove unnecessary constructor from Supplier<>
+
+ Looks like operator hb_array_t<> from vector works here. :)
+
+ src/hb-machinery.hh | 5 -----
+ 1 file changed, 5 deletions(-)
+
+commit 507cac4943e987879b95d842fe60643abbf22efa
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 23:31:19 2018 -0500
+
+ [arrays] Start moving Supplier<> to hb_array_t<>
+
+ src/hb-machinery.hh | 31 +++++++++++--------------------
+ 1 file changed, 11 insertions(+), 20 deletions(-)
+
+commit 1e2c98126e8500ace31483b05d77478afd59bab8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 22:30:44 2018 -0500
+
+ [arrays] Remove unused stride from Supplier
+
+ src/hb-machinery.hh | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+commit 0d0fe9df46c645538feaee1ec99a0108383a3669
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 22:29:40 2018 -0500
+
+ [arrays] Remove need of stride in Supplier<>
+
+ src/hb-face.cc | 6 ++----
+ src/hb-open-file.hh | 19 +++++++++----------
+ src/hb-vector.hh | 2 +-
+ 3 files changed, 12 insertions(+), 15 deletions(-)
+
+commit dcfa4a8d711716de88b94a370663e9564e3e7ccc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 20:40:07 2018 -0500
+
+ [array] Remove custom hb_bytes_t implementation
+
+ src/hb-array.hh | 67
+ +++++++++++++++++--------------------------------
+ src/hb-machinery.hh | 2 +-
+ src/hb-ot-name-table.hh | 8 +++---
+ src/hb-ot-name.cc | 10 ++++----
+ 4 files changed, 33 insertions(+), 54 deletions(-)
+
+commit 3656f56d47cf6b89a25990d7836704fef79fa5b4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 20:35:11 2018 -0500
+
+ [arrays] Minor
+
+ src/hb-array.hh | 3 ++-
+ src/hb-open-type.hh | 10 ++++------
+ src/hb-vector.hh | 4 +---
+ 3 files changed, 7 insertions(+), 10 deletions(-)
+
+commit aa8f94714ee720c56be1a3406df7bacb0550158c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 20:20:35 2018 -0500
+
+ [array] Minor
+
+ src/hb-array.hh | 4 ++++
+ src/hb-iter.hh | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 5a552f75468d777d8d4bd3168e28f56a3369eafd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 20:07:44 2018 -0500
+
+ [array] Move hb_array_t and related types to hb-array.hh
+
+ src/Makefile.sources | 1 +
+ src/hb-array.hh | 241
+ +++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-dsalgs.hh | 206 -------------------------------------------
+ src/hb-machinery.hh | 1 +
+ src/hb-vector.hh | 2 +-
+ 5 files changed, 244 insertions(+), 207 deletions(-)
+
+commit 01d06e34ffa746d3737df00bb692cdb1e859c1c6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 16 14:27:43 2018 -0500
+
+ Minor change to explicit_operator aesthetics
+
+ src/hb-iter.hh | 2 +-
+ src/hb-machinery.hh | 2 +-
+ src/hb-vector.hh | 4 ++--
+ src/hb.hh | 4 ++--
+ 4 files changed, 6 insertions(+), 6 deletions(-)
+
+commit b2ebaa9afac0f57006283db92d1f3b4df3d6bd7e
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sun Dec 16 22:38:10 2018 +0330
+
+ Remove redundant 'inline' from methods (#1483)
+
+ src/hb-aat-fdsc-table.hh | 12 +-
+ src/hb-aat-layout-ankr-table.hh | 12 +-
+ src/hb-aat-layout-bsln-table.hh | 13 +-
+ src/hb-aat-layout-common.hh | 150 +++++++-------
+ src/hb-aat-layout-feat-table.hh | 46 ++---
+ src/hb-aat-layout-just-table.hh | 26 +--
+ src/hb-aat-layout-kerx-table.hh | 120 +++++------
+ src/hb-aat-layout-lcar-table.hh | 14 +-
+ src/hb-aat-layout-morx-table.hh | 104 +++++-----
+ src/hb-aat-layout-trak-table.hh | 28 +--
+ src/hb-aat-layout.hh | 2 +-
+ src/hb-aat-ltag-table.hh | 6 +-
+ src/hb-aat-map.hh | 7 +-
+ src/hb-atomic.hh | 26 +--
+ src/hb-blob.hh | 32 ++-
+ src/hb-buffer.hh | 76 ++++---
+ src/hb-cache.hh | 10 +-
+ src/hb-cff-interp-common.hh | 197 +++++++++---------
+ src/hb-cff-interp-cs-common.hh | 166 +++++++--------
+ src/hb-cff-interp-dict-common.hh | 26 +--
+ src/hb-cff1-interp-cs.hh | 21 +-
+ src/hb-cff2-interp-cs.hh | 48 ++---
+ src/hb-common.cc | 13 +-
+ src/hb-debug.hh | 20 +-
+ src/hb-directwrite.cc | 2 +-
+ src/hb-dsalgs.hh | 84 ++++----
+ src/hb-face.cc | 2 +-
+ src/hb-face.hh | 6 +-
+ src/hb-font.hh | 216 ++++++++++----------
+ src/hb-ft.cc | 8 +-
+ src/hb-glib.cc | 2 +-
+ src/hb-icu.cc | 2 +-
+ src/hb-iter.hh | 18 +-
+ src/hb-kern.hh | 8 +-
+ src/hb-machinery.hh | 210 +++++++++----------
+ src/hb-map.hh | 38 ++--
+ src/hb-mutex.hh | 12 +-
+ src/hb-null.hh | 26 +--
+ src/hb-object.hh | 34 ++--
+ src/hb-open-file.hh | 92 ++++-----
+ src/hb-open-type.hh | 253 ++++++++++++-----------
+ src/hb-ot-cff-common.hh | 177 ++++++++--------
+ src/hb-ot-cff1-table.cc | 32 +--
+ src/hb-ot-cff1-table.hh | 160 +++++++--------
+ src/hb-ot-cff2-table.cc | 16 +-
+ src/hb-ot-cff2-table.hh | 62 +++---
+ src/hb-ot-cmap-table.hh | 185 +++++++++--------
+ src/hb-ot-color-cbdt-table.hh | 40 ++--
+ src/hb-ot-color-colr-table.hh | 18 +-
+ src/hb-ot-color-cpal-table.hh | 55 +++--
+ src/hb-ot-color-sbix-table.hh | 48 ++---
+ src/hb-ot-color-svg-table.hh | 20 +-
+ src/hb-ot-font.cc | 2 +-
+ src/hb-ot-gasp-table.hh | 6 +-
+ src/hb-ot-glyf-table.hh | 37 ++--
+ src/hb-ot-hdmx-table.hh | 36 ++--
+ src/hb-ot-head-table.hh | 10 +-
+ src/hb-ot-hhea-table.hh | 2 +-
+ src/hb-ot-hmtx-table.hh | 18 +-
+ src/hb-ot-kern-table.hh | 44 ++--
+ src/hb-ot-layout-base-table.hh | 104 +++++-----
+ src/hb-ot-layout-common.hh | 425
+ ++++++++++++++++++++-------------------
+ src/hb-ot-layout-gdef-table.hh | 126 ++++++------
+ src/hb-ot-layout-gpos-table.hh | 209 +++++++++----------
+ src/hb-ot-layout-gsub-table.hh | 360 ++++++++++++++++-----------------
+ src/hb-ot-layout-gsubgpos.hh | 353 ++++++++++++++++----------------
+ src/hb-ot-layout-jstf-table.hh | 44 ++--
+ src/hb-ot-map.hh | 38 ++--
+ src/hb-ot-math-table.hh | 142 ++++++-------
+ src/hb-ot-maxp-table.hh | 12 +-
+ src/hb-ot-name-table.hh | 21 +-
+ src/hb-ot-os2-table.hh | 34 ++--
+ src/hb-ot-post-table.hh | 26 +--
+ src/hb-ot-shape-complex-indic.cc | 10 +-
+ src/hb-ot-shape-complex-khmer.cc | 10 +-
+ src/hb-ot-shape.hh | 6 +-
+ src/hb-ot-stat-table.hh | 16 +-
+ src/hb-ot-var-avar-table.hh | 8 +-
+ src/hb-ot-var-fvar-table.hh | 55 +++--
+ src/hb-ot-var-hvar-table.hh | 16 +-
+ src/hb-ot-var-mvar-table.hh | 10 +-
+ src/hb-ot-vorg-table.hh | 22 +-
+ src/hb-set-digest.hh | 41 ++--
+ src/hb-set.hh | 114 +++++------
+ src/hb-shape.cc | 14 +-
+ src/hb-shaper.cc | 14 +-
+ src/hb-shaper.hh | 10 +-
+ src/hb-subset-cff-common.hh | 175 ++++++++--------
+ src/hb-subset-cff1.cc | 91 ++++-----
+ src/hb-subset-cff2.cc | 36 ++--
+ src/hb-subset-plan.hh | 12 +-
+ src/hb-subset.hh | 4 +-
+ src/hb-ucdn.cc | 2 +-
+ src/hb-unicode.hh | 26 +--
+ src/hb-uniscribe.cc | 16 +-
+ src/hb-utf.hh | 54 +++--
+ src/hb-vector.hh | 86 ++++----
+ 97 files changed, 2911 insertions(+), 2987 deletions(-)
+
+commit 7251c7729061b7df29efe2b466315e96c81ad03f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Dec 15 21:00:55 2018 -0500
+
+ Whitespace
+
+ src/hb-buffer-serialize.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 829b56b1a22736eac49132b2e56dc480157afca2
+Author: Behdad Esfahbod <behdad@google.com>
+Date: Sat Dec 15 13:02:13 2018 -0500
+
+ Whitespace
+
+ src/hb-ot-cff-common.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 42a1012562c1f020f470526a34b68ed21ad138cc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 13 19:39:59 2018 -0500
+
+ [subset] Actually subset GDEF
+
+ src/hb-subset.cc | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit c9c746c7f6091e575fd74ba8f8cae2c4fd44a1ad
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 13 18:37:37 2018 -0500
+
+ [subset] Fix up ClassDef some more
+
+ src/hb-ot-layout-common.hh | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+commit 7ee6128902333716dd8d8df6e38a8d1ebacb0a46
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 13 18:32:04 2018 -0500
+
+ [subset] Fix ClassDefFormat1 subsetting
+
+ src/hb-ot-layout-common.hh | 13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+commit 1b6d0c44b3067f5840d3fdac99fbc7448d0f37bf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 13 18:10:48 2018 -0500
+
+ [subset] Sketch GDEF subsetting
+
+ src/hb-ot-layout-gdef-table.hh | 20 ++++++++++++++++++++
+ src/hb-ot-layout-gsubgpos.hh | 2 ++
+ 2 files changed, 22 insertions(+)
+
+commit 705e2f5056d60c28154004e0c5d3b0ec67fe93c8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 13 17:48:42 2018 -0500
+
+ [subset] Implement for ClassDef
+
+ src/hb-ot-layout-common.hh | 80
+ ++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout-gsub-table.hh | 8 ++---
+ 2 files changed, 84 insertions(+), 4 deletions(-)
+
+commit 6e33a3955df77b9d1fda5ea44302d97b21e7871c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 13 16:40:01 2018 -0500
+
+ Minor
+
+ src/hb-machinery.hh | 12 +++++++++---
+ src/hb-ot-cmap-table.hh | 3 +--
+ src/hb-ot-layout-gsub-table.hh | 8 ++++----
+ 3 files changed, 14 insertions(+), 9 deletions(-)
+
+commit cc65901ca7185df926570d5067ace763a2cc759e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 13 16:01:45 2018 -0500
+
+ [serialize] Implement for ClassDef
+
+ src/hb-ot-layout-common.hh | 33 +++++++++++++++++++++++++++++++--
+ 1 file changed, 31 insertions(+), 2 deletions(-)
+
+commit e5309e4fd8583aa5c5ad9f3934d8aa593c850468
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 13 15:57:12 2018 -0500
+
+ [serialize] Implement for ClassDefFormat2
+
+ src/hb-ot-layout-common.hh | 50
+ ++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 46 insertions(+), 4 deletions(-)
+
+commit c8b43cbe316b07507aece4dc769f38226cd706da
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 13 15:50:13 2018 -0500
+
+ [serialize] Implement for ClassDefFormat1
+
+ src/hb-ot-layout-common.hh | 34 ++++++++++++++++++++++++++++++++++
+ 1 file changed, 34 insertions(+)
+
+commit 576103132945c9d916514720d4034b398e099cfa
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Dec 12 21:21:26 2018 -0500
+
+ [subset] Minor
+
+ src/hb-subset.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 798e98c47bd9fa4d434487ae92e2c88ebb8a19a5
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 12 18:08:15 2018 -0800
+
+ [CFF] bad offset in Index (#1476)
+
+ * Update hb-ot-cff-common.hh
+
+ * fix bug
+
+ * bummer fix wasn't hit. refix
+
+ * additional sanity check
+
+ * Added test cases for oss-fuzz issues 11805, 11806
+
+ src/hb-ot-cff-common.hh | 10
+ ++++++++--
+ ...clusterfuzz-testcase-hb-subset-fuzzer-5643036478930944 | Bin 0 ->
+ 369 bytes
+ ...clusterfuzz-testcase-hb-subset-fuzzer-5686186874503168 | Bin 0 ->
+ 962 bytes
+ 3 files changed, 8 insertions(+), 2 deletions(-)
+
+commit bcb4ecaf68c7219e89a801352bfc6a682b1581ef
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 12 17:36:01 2018 -0800
+
+ [CFF] check out of range FD index (#1477)
+
+ * add fd index checks to subr subsetter
+
+ also added oss-fuzz test case
+
+ * undid SubrSubsetParam::is_valid
+
+ because already validated by SubrClosures.valid
+
+ src/hb-subset-cff-common.hh | 10 ++++++++++
+ ...lusterfuzz-testcase-hb-subset-fuzzer-5762137968869376 | Bin 0 ->
+ 2037 bytes
+ 2 files changed, 10 insertions(+)
+
+commit 3f8e7a98d3cc10fefe65b9638c8abdf3ebe152cb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Dec 12 11:32:57 2018 -0500
+
+ [util/hb-subset] Add --layout to keep GDEF/GSUB/GPOS
+
+ Will become default and option removed in the future.
+
+ util/hb-subset.cc | 1 +
+ util/options.cc | 1 +
+ util/options.hh | 2 ++
+ 3 files changed, 4 insertions(+)
+
+commit 2cc993e035cb37711f894968246817e53a9e823d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Dec 12 10:07:38 2018 -0500
+
+ [dispatch] Minor
+
+ src/hb-ot-layout-gpos-table.hh | 4 +---
+ src/hb-ot-layout-gsub-table.hh | 4 +---
+ 2 files changed, 2 insertions(+), 6 deletions(-)
+
+commit 602fbfe3c96b3f18b0109239528ba18a19be4948
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Dec 12 09:56:47 2018 -0500
+
+ [sanitize] Fix sanitizing sublookup array
+
+ src/hb-ot-layout-common.hh | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+commit c78e4784fbe06ceb27b54a1d8908016ade071cb4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Dec 12 09:50:18 2018 -0500
+
+ [dispatch] Minor
+
+ src/hb-machinery.hh | 1 +
+ src/hb-ot-layout-gsubgpos.hh | 3 ---
+ src/hb-subset.hh | 1 -
+ 3 files changed, 1 insertion(+), 4 deletions(-)
+
+commit f9d211af1d6d78d092038d263b222ec8a65cf09d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Dec 12 09:44:30 2018 -0500
+
+ Revert "Minor fix re sanitize of Lookup subtables"
+
+ This reverts commit 7146718bef81492e13aede0a2801cda1da41ce35.
+
+ Fixing differently.
+
+ src/hb-ot-layout-common.hh | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+commit 7ee5c52345c122436e054062084cd51292b90ad1
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Dec 12 15:14:37 2018 +0330
+
+ minor style fix, use void in methods on no argument
+
+ src/hb-aat-fdsc-table.hh | 4 +-
+ src/hb-aat-layout-common.hh | 6 +-
+ src/hb-aat-layout-feat-table.hh | 4 +-
+ src/hb-aat-layout-trak-table.hh | 18 +--
+ src/hb-aat-layout.cc | 4 +-
+ src/hb-buffer.cc | 48 +++----
+ src/hb-directwrite.cc | 297
+ +++++++++++++++++++---------------------
+ src/hb-dsalgs.hh | 5 +-
+ src/hb-map.hh | 20 +--
+ src/hb-ot-cmap-table.hh | 2 +-
+ src/hb-ot-color-cbdt-table.hh | 2 +-
+ src/hb-ot-color-cpal-table.hh | 4 +-
+ src/hb-ot-color-sbix-table.hh | 10 +-
+ src/hb-ot-color-svg-table.hh | 15 +-
+ src/hb-ot-glyf-table.hh | 2 +-
+ src/hb-ot-hdmx-table.hh | 6 +-
+ src/hb-ot-layout-base-table.hh | 11 +-
+ src/hb-ot-os2-table.hh | 15 +-
+ 18 files changed, 211 insertions(+), 262 deletions(-)
+
+commit a33f238f8888cc969e1e393deda0518fb8dd6b13
+Merge: 7146718b 1e09add2
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Dec 12 12:44:06 2018 +0330
+
+ Merge pull request #1474 from fanc999/master.msvc
+
+ Few fixes for Visual Studio builds
+
+commit 7146718bef81492e13aede0a2801cda1da41ce35
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Dec 11 23:44:29 2018 -0500
+
+ Minor fix re sanitize of Lookup subtables
+
+ We were dereferencing Null pointers and trying to sanitize them,
+ which is not necessary...
+
+ src/hb-ot-layout-common.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit ce069d193229cde12c77a3f464fc10286bedf5f3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Dec 11 23:07:48 2018 -0500
+
+ Minor
+
+ src/hb-open-type.hh | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 1aea86944605e7e18acfd2c0a77ba60e62239274
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Dec 11 22:53:58 2018 -0500
+
+ [subset] Map glyphs during SingleSubst subsetting
+
+ Ha!
+
+ src/hb-ot-layout-gsub-table.hh | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+commit 41d1a1c10f7e5ca69a337ae164d270e09b5f93ac
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Dec 11 22:48:27 2018 -0500
+
+ [subset] Minor
+
+ src/hb-machinery.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 2aba2c6c73301396f7e0e5dee819ab6863e74900
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Dec 11 21:18:47 2018 -0500
+
+ [serialize] Break down assert
+
+ src/hb-machinery.hh | 18 ++++++++----------
+ 1 file changed, 8 insertions(+), 10 deletions(-)
+
+commit 9844c880e280e9cd28dcbeac2e581ac923c5ddf3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Dec 11 17:28:04 2018 -0500
+
+ Minor
+
+ test/shaping/Makefile.am | 2 ++
+ util/Makefile.am | 2 ++
+ 2 files changed, 4 insertions(+)
+
+commit 2941208f1eedabec2715b2a67d40f058df7eb5e6
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 11 12:21:24 2018 -0800
+
+ [CFF] oss-fuzz issue 11690 ASSERT: substr.offset >= opStart (#1461)
+
+ * fix oss-fuzz 11690: substr.offset >= opStart
+
+ detect recursive subroutine call & handle as error
+
+ * fix build failure
+
+ * add minimized test case for oss-fuzz 11690
+
+ * removed asserts
+
+ src/hb-cff-interp-common.hh | 9 ++++-----
+ src/hb-subset-cff-common.hh | 12
+ ++++++++++--
+ src/hb-subset-cff1.cc | 4 ++--
+ src/hb-subset-cff2.cc | 4 ++--
+ ...testcase-minimized-hb-subset-fuzzer-5750420593442816 | Bin 0 ->
+ 96091 bytes
+ 5 files changed, 18 insertions(+), 11 deletions(-)
+
+commit 333586245cb37668c8a29af17920474c09667f4b
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 11 12:20:20 2018 -0800
+
+ minimize use of assert: removed or changed to error handling (#1467)
+
+ src/hb-ot-cff-common.hh | 2 +-
+ src/hb-ot-cff1-table.hh | 12 ++++++++----
+ src/hb-subset-cff-common.cc | 6 ++++--
+ src/hb-subset-cff-common.hh | 1 -
+ src/hb-subset-cff1.cc | 22 +++++++++++++++++-----
+ src/hb-subset-cff2.cc | 14 +++++++++++---
+ 6 files changed, 41 insertions(+), 16 deletions(-)
+
+commit f24498c1e95e816889eb7a2f8b1062bbf15bed1b
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Tue Dec 11 23:02:52 2018 +0330
+
+ [ci] Fix Travis macOS bot ICU issue (#1472)
+
+ .travis.yml | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit 9f3a51ddb952e1281f9a656fde7193c3e3b8dad2
+Author: 👻 <sarabi@Corsac-Fox.local>
+Date: Tue Dec 11 13:38:05 2018 -0500
+
+ [ucdn] Fix header
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/1470
+
+ src/hb-ucdn/ucdn.h | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+commit b225593d6baf3455e1ac951efc0df5015fdf7c69
+Author: David Corbett <corbett.dav@husky.neu.edu>
+Date: Tue Dec 11 13:19:17 2018 -0500
+
+ Correct REPLACEMENT CHARACTER's code point to FFFD (#1471)
+
+ test/shaping/hb_test_tools.py | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 1e09add232e14ef61d2f222a5ee05a2105af64f0
+Author: Chun-wei Fan <fanchunwei@src.gnome.org>
+Date: Wed Dec 12 01:32:01 2018 +0800
+
+ test/api: Fix building on pre-C99 compilers
+
+ Ensure variables are declared at the top of the block.
+
+ test/api/hb-test.h | 3 ++-
+ test/api/test-aat-layout.c | 3 ++-
+ test/api/test-font.c | 2 +-
+ test/api/test-map.c | 9 ++++++---
+ test/api/test-ot-color.c | 9 +++++----
+ test/api/test-ot-face.c | 14 ++++++++------
+ test/api/test-ot-name.c | 30 ++++++++++++++++--------------
+ test/api/test-ot-tag.c | 11 ++++++-----
+ 8 files changed, 46 insertions(+), 35 deletions(-)
+
+commit 09b16c536d31376de771eedde54620dd6c8f39d7
+Author: Chun-wei Fan <fanchunwei@src.gnome.org>
+Date: Wed Dec 12 01:23:53 2018 +0800
+
+ CMake: Fix Introspection builds
+
+ We need to add -DHB_AAT_H and -DHB_AAT_H_IN to the flags that
+ are passed
+ to g-ir-scanner, so that introspection builds can proceed normally.
+
+ CMakeLists.txt | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 1683bb2c9337fa34e5e80d459ab5eab99d7a9804
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Dec 8 13:57:39 2018 +0330
+
+ [glyf] minor
+
+ src/hb-ot-glyf-table.hh | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit f7cfe99815c07f82d5ad253af1e811db734bf92b
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Dec 8 13:40:44 2018 +0330
+
+ [os2] Move typometrics detection logic to the table (#1465)
+
+ src/hb-ot-hmtx-table.hh | 14 +++++---------
+ src/hb-ot-os2-table.hh | 7 ++++---
+ 2 files changed, 9 insertions(+), 12 deletions(-)
+
+commit 47cf9a9633bbff12fef1131e7179dfc351f7e5f3
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Dec 8 10:20:25 2018 +0330
+
+ Apply non-controversial parts of ot-style (#1464)
+
+ Things to be used in https://github.com/harfbuzz/harfbuzz/pull/1459
+
+ src/hb-aat-fdsc-table.hh | 29 +++++++++++++++++++++++++---
+ src/hb-aat-layout-common.hh | 1 +
+ src/hb-ot-head-table.hh | 13 +++++++++++++
+ src/hb-ot-os2-table.hh | 46
+ +++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-stat-table.hh | 38 ++++++++++++++++++-------------------
+ 5 files changed, 105 insertions(+), 22 deletions(-)
+
+commit 4d809696ef4db046d11072e5433ea5ff36bd7b26
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Dec 7 20:49:39 2018 -0800
+
+ fix for issue #1447 (#1462)
+
+ Added case for OpCode_BaseFontName. This opcode in spec but
+ practically unused.
+ Added a comment for default case which can't be hit
+
+ src/hb-ot-cff1-table.hh | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit 1abd4fcaec31053b442525d7f240af489c5974b1
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Fri Dec 7 22:34:12 2018 +0330
+
+ [fdsc] minor
+
+ src/hb-aat-fdsc-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 59345cdef38cf1f514a6a0eb6e8852350acb6166
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Dec 6 13:36:26 2018 -0800
+
+ [CFF] Refix oss-fuzz 11714: set_blends (PR #1458) (#1460)
+
+ * pass subarray of stack to set_blends
+
+ * get_subarray to return a value, not ref
+
+ * restored error check (with tweak)
+
+ src/hb-cff-interp-common.hh | 5 +++++
+ src/hb-cff2-interp-cs.hh | 14 +++++++++-----
+ 2 files changed, 14 insertions(+), 5 deletions(-)
+
+commit 20245f0000a0f04f2ba172b51ce69ee7ebb256aa
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 6 10:27:37 2018 -0800
+
+ Fix likely check
+
+ Ouch!
+
+ src/hb-cff-interp-dict-common.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit d866e905fd555d393464ed58d5fc11ee453c7ea4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 6 10:26:32 2018 -0800
+
+ Add default value to first argument of sub_array()
+
+ src/hb-dsalgs.hh | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit f1352f7486caaf6d3480ef2ac6b4719acf73e6a2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 6 10:21:06 2018 -0800
+
+ Add sub_array to hb_vector_t
+
+ src/hb-vector.hh | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+commit ca23b719357b01e98a5cf533bbf637d6706a4ec2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Dec 6 10:19:03 2018 -0800
+
+ Add default-value for second arg of sub_array()
+
+ src/hb-dsalgs.hh | 7 +++----
+ src/hb-open-type.hh | 8 ++++----
+ 2 files changed, 7 insertions(+), 8 deletions(-)
+
+commit 6ad3fcddaf2ba8ebc9ad49ff9e7b33b60fcad16a
+Merge: f95324a3 ae087d10
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Thu Dec 6 10:21:00 2018 +0330
+
+ Merge pull request #1458 from harfbuzz/cff-check-blends
+
+ [CFF] oss-fuzz issue 11714: set_blends
+
+commit ae087d10c22249f3aec3239e4eac98a728f71f75
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 5 21:47:34 2018 -0800
+
+ add minimized test case for oss-fuzz issue 11714
+
+ ...-testcase-minimized-hb-subset-fuzzer-5710107829075968 | Bin 0 ->
+ 3660 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit 1ccbdcf73bbc967f5f94c0bc7f7e869bd87d9fa0
+Merge: 14d29a10 f95324a3
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 5 21:37:38 2018 -0800
+
+ Merge branch 'master' into cff-check-blends
+
+commit 14d29a10437205566c4bd7bcfa2282d34d9f4f2f
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 5 21:33:29 2018 -0800
+
+ check number of blends against args on stack
+
+ src/hb-cff2-interp-cs.hh | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit f95324a3351c1f699214ad84d073268218ea83a3
+Merge: 6727c4b6 9d8f3b0d
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Thu Dec 6 08:33:44 2018 +0330
+
+ Merge pull request #1457 from harfbuzz/cff-varstore-sanitize
+
+ [CFF] oss-fuzz issue 11713 (CFF2VariationStore::serialize)
+
+commit 6727c4b6f0356b08803b4d5cde608ec004e3533f
+Merge: d9dabc00 34e3ef8f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Dec 5 17:37:21 2018 -0800
+
+ Merge pull request #1456 from harfbuzz/cff-subr-sanitize
+
+ [CFF] fix oss-fuzz issue 11691 (BlendArg::set_blends)
+
+commit 9d8f3b0dfbf39f5dfa25d52f47e8af6ad318eb17
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 5 17:14:51 2018 -0800
+
+ add minimized test case for oss-fuzz issue 11713
+
+ ...z-testcase-minimized-hb-subset-fuzzer-5660711141769216 | Bin 0 ->
+ 383 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit c31092ab34641072606f854408eb1bea18ed2507
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 5 17:04:55 2018 -0800
+
+ sanitize variationStore in CFF2 against its size
+
+ src/hb-ot-cff2-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 34e3ef8ff394f281b8d7e2c08f346a9495692edc
+Merge: 72d8f763 d9dabc00
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 5 15:50:05 2018 -0800
+
+ Merge branch 'master' into cff-subr-sanitize
+
+commit 72d8f76368b264a42fe58438fe15811d458a7935
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 5 15:49:11 2018 -0800
+
+ add minimized test case for oss-fuzz issue 11691
+
+ ...z-testcase-minimized-hb-shape-fuzzer-5686369209286656 | Bin 0 ->
+ 2880 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit d9dabc00e9278a346e85538212c126da7e610d55
+Merge: 81cfd3c7 010e2ddb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Dec 5 15:39:34 2018 -0800
+
+ Merge pull request #1454 from harfbuzz/cff-fixbcd
+
+ [CFF] fix oss-fuzz issue 11674: parse_bcd
+
+commit 81cfd3c775dbc470f57d7fe2775cc068ffa367b6
+Merge: 8394a6cb 6708c559
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Dec 5 15:37:15 2018 -0800
+
+ Merge pull request #1455 from harfbuzz/cff-strinc_assert
+
+ [CFF] fix oss-fuzz issue 11675 (ASSERT: count <= str.len)
+
+commit 6dcfda92c17a7701479118751a8290246e9a3c05
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 5 15:07:46 2018 -0800
+
+ sanitize CFF1 & CFF2 global subrs
+
+ src/hb-ot-cff1-table.hh | 2 +-
+ src/hb-ot-cff2-table.hh | 1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+commit 6708c5595fc6babdae0132f8a23cbe3558a58703
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 5 12:51:18 2018 -0800
+
+ fix oss-fuzz issue 11675 (ASSERT: count <= str.len)
+
+ Also added an additional error check to avail ()
+
+ src/hb-cff-interp-common.hh | 18
+ ++++++++++++++++--
+ ...stcase-minimized-hb-subset-fuzzer-5768186323009536 | Bin 0 ->
+ 337 bytes
+ 2 files changed, 16 insertions(+), 2 deletions(-)
+
+commit 010e2ddb384b5a721172fd7466aafec58dbf8063
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 5 12:23:58 2018 -0800
+
+ minimized test case for oss-fuzz issue 11674
+
+ ...zz-testcase-minimized-hb-subset-fuzzer-5672006905757696 | Bin 0 ->
+ 73 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit 2cb9d4c183afc838ecf2ba0d47814e9eaa6f09c6
+Merge: a5fa843c 8394a6cb
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 5 11:25:29 2018 -0800
+
+ Merge branch 'master' into cff-fixbcd
+
+commit a5fa843c746e20aaca48ece6cff057deb8d916ca
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 5 11:18:16 2018 -0800
+
+ fixed a bug with fractional part in a negative value
+
+ src/hb-cff-interp-dict-common.hh | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 8394a6cb252dd8b4230c2b59e8c346ec5403bf88
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Dec 5 15:23:41 2018 +0330
+
+ [os2] Make newer table fields accessible (#1452)
+
+ src/hb-ot-os2-table.hh | 88
+ +++++++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 66 insertions(+), 22 deletions(-)
+
+commit 5ab086ebb18112ef48bf6c913acc91b2009a9bed
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Dec 5 14:17:37 2018 +0330
+
+ [fdsc] Implement the table parsing
+
+ Related to https://github.com/harfbuzz/harfbuzz/issues/1337
+
+ May used in addition to an API related to STAT.
+
+ Lots of Apple fonts have it.
+
+ src/Makefile.sources | 1 +
+ src/hb-aat-fdsc-table.hh | 103
+ +++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-aat-layout.cc | 1 +
+ 3 files changed, 105 insertions(+)
+
+commit 8f80e53341a3d5bac6c2c39ab6d6973eedb0b074
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Dec 5 13:51:14 2018 +0330
+
+ [gasp] Implement the table parsing
+
+ May or may not be used in
+ https://github.com/harfbuzz/harfbuzz/pull/1432
+
+ src/Makefile.sources | 1 +
+ src/hb-ot-gasp-table.hh | 84
+ +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout.cc | 5 +--
+ 3 files changed, 88 insertions(+), 2 deletions(-)
+
+commit 79e7e3445efef2dc57f8a10c7e355e802af08868
+Merge: cf4b7db6 78f639b8
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Dec 5 13:25:18 2018 +0330
+
+ Merge pull request #1449 from harfbuzz/cff-fixcharset
+
+ [CFF] fix for oss-fuzz 11657: Charset overrun
+
+commit cf4b7db6b1e01c11d7a8a26d95cf947935a234a7
+Merge: 32cc46c7 803d2f92
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Dec 5 13:23:23 2018 +0330
+
+ Merge pull request #1448 from harfbuzz/cff-leak
+
+ [CFF] fix leak: oss-fuzz 11662
+
+commit 620d1ef588c6ce25644891cfe4b9c20fd8a9d1db
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 5 00:36:11 2018 -0800
+
+ fix unsigned long const
+
+ src/hb-cff-interp-dict-common.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 28dfb4c14280b05ad0a519f9df2b0eda41a62540
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Dec 5 00:26:03 2018 -0800
+
+ fix signed/unsigned comparison
+
+ src/hb-cff-interp-dict-common.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit f9cee08edd32182044407bf6ffde00df0feb09b7
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 23:58:26 2018 -0800
+
+ use sized int types in parse_bcd
+
+ src/hb-cff-interp-dict-common.hh | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit c01a5f32a33fa875de68ca29a4672fd36a05245b
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 23:23:23 2018 -0800
+
+ refix
+
+ src/hb-cff-interp-dict-common.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 755fefc92113e469a1aadee2546958fede156c01
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 23:18:28 2018 -0800
+
+ fix bug
+
+ src/hb-cff-interp-dict-common.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0e81b153aff1f2e301e73ca1a15a9bc5b2e7bb82
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 22:40:07 2018 -0800
+
+ fix typo
+
+ src/hb-cff-interp-dict-common.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 85d4b15cd88ce9a6ffccccf90300f9c184166058
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 22:30:33 2018 -0800
+
+ include float.h
+
+ src/hb-cff-interp-dict-common.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 5a7c371e4c6f1775ebbfe120fafe92afe402a954
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 22:24:38 2018 -0800
+
+ check overflow & clamp
+
+ src/hb-cff-interp-dict-common.hh | 36
+ +++++++++++++++++++++++++++---------
+ 1 file changed, 27 insertions(+), 9 deletions(-)
+
+commit 32cc46c75a5f163f254b7998ed9193d5bbc85e4b
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 21:32:34 2018 -0800
+
+ [CFF] fix oss-fuzz issue 11670: NULL dereference (#1450)
+
+ * guard against no subr access
+
+ * code tweak
+
+ * add minimized testcase for oss-fuzz 11670 (Null deference)
+
+ src/hb-cff-interp-cs-common.hh | 22
+ ++++++++++++++++-----
+ src/hb-ot-cff-common.hh | 2 +-
+ ...ase-minimized-hb-subset-fuzzer-5672913680728064 | Bin 0 -> 861 bytes
+ 3 files changed, 18 insertions(+), 6 deletions(-)
+
+commit 78f639b8bf508ccfb27224f12442f8e8a1460e08
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 14:17:03 2018 -0800
+
+ added minimized testcase for oss-fuzz issue 11657
+
+ ...zz-testcase-minimized-hb-shape-fuzzer-5700264032468992 | Bin 0 ->
+ 648 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit d3d2f32c6e85de1d7fbbb18afef356e09110e61c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 13:51:26 2018 -0800
+
+ fix oss-fuzz 11657: buffer overrun
+
+ Check overrun in Charset1_2::get_glyph
+
+ src/hb-ot-cff1-table.hh | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+commit d0a250a7b15f1099c2005bc2427d62e7370dcc33
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Tue Dec 4 23:42:13 2018 +0330
+
+ Reuse hb_aat_layout_has_* logic in coretext-aat detection logic
+ (#1442)
+
+ src/hb-coretext.cc | 16 ++--------------
+ 1 file changed, 2 insertions(+), 14 deletions(-)
+
+commit 803d2f92dca329a84d92c224a73e13906e8b8d56
+Merge: 6ce8d10b c775adc1
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 11:01:26 2018 -0800
+
+ Merge branch 'master' into cff-leak
+
+commit 6ce8d10b45598f5f6dade38e65486f793f33d0b6
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 10:39:17 2018 -0800
+
+ add unlikely to error handling
+
+ src/hb-ot-cff1-table.hh | 2 +-
+ src/hb-ot-cff2-table.hh | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit b61f74f69a84f427b40deefefed429fbc915981c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 10:30:35 2018 -0800
+
+ added minimized test case for oss-fuzz issue 11662
+
+ ...testcase-minimized-hb-shape-fuzzer-5175735354916864 | Bin 0 ->
+ 354461 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit 0b952e6026c8be13d16d97f464034ee477e6282f
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 10:22:35 2018 -0800
+
+ more leak fixes
+
+ src/hb-ot-cff1-table.hh | 2 +-
+ src/hb-ot-cff2-table.hh | 3 ++-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+commit c775adc1383f72f02b1329628b3eba1dc377a0f7
+Merge: c968869f 04f2ca94
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Tue Dec 4 21:30:07 2018 +0330
+
+ Merge pull request #1444 from harfbuzz/cff-assert
+
+ removed assert, fixes https://github.com/harfbuzz/harfbuzz/issues/1443
+
+commit 9473463f5c884fcb1de8a7ba7410da2601e6ffa8
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 09:58:48 2018 -0800
+
+ fix attempt for oss-fuzz 11662 leak
+
+ src/hb-ot-cff1-table.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 04f2ca94212983d675ed2cd36350be23ff2a6e19
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Dec 4 09:24:07 2018 -0800
+
+ removed assert
+
+ src/hb-ot-cff1-table.hh | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit c968869f212dbfcb86d42fb36049328521cbf00c
+Merge: 8c05b955 c48f53d3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Dec 4 04:14:13 2018 -0500
+
+ Merge pull request #1441 from harfbuzz/cff-doublenum
+
+ use double as CFF Number implementation
+
+commit c48f53d30901dfc20b7432c2947e66642010dc4e
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Dec 3 16:59:41 2018 -0800
+
+ more double changes
+
+ src/hb-cff2-interp-cs.hh | 4 ++--
+ test/api/test-ot-extents-cff.c | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 9424e8052686a6a93e0d30e38aecbe927db9d787
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Dec 3 16:18:10 2018 -0800
+
+ added minimized test cases
+
+ ...zz-testcase-minimized-hb-shape-fuzzer-5647267827023872 | Bin 0 ->
+ 655 bytes
+ ...zz-testcase-minimized-hb-shape-fuzzer-5725855502827520 | Bin 0 ->
+ 655 bytes
+ ...zz-testcase-minimized-hb-shape-fuzzer-5736657639178240 | Bin 0 ->
+ 459 bytes
+ 3 files changed, 0 insertions(+), 0 deletions(-)
+
+commit 5fff6ab0024547a8ac47723a0047f4b17416d6ce
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Dec 3 16:06:58 2018 -0800
+
+ additional precision made a difference in extents test
+
+ src/hb-cff-interp-common.hh | 2 +-
+ src/hb-cff2-interp-cs.hh | 2 +-
+ test/api/test-ot-extents-cff.c | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 9e5180cd444b6900a0fa0c3df4c8138f9a663383
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Dec 3 15:32:42 2018 -0800
+
+ more double changes
+
+ src/hb-cff-interp-common.hh | 8 ++++----
+ src/hb-cff-interp-dict-common.hh | 10 +++++-----
+ 2 files changed, 9 insertions(+), 9 deletions(-)
+
+commit 9af33d7a2ad5ce88fc508bc5c6a56be4650d2621
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Dec 3 14:48:46 2018 -0800
+
+ Number to use double for all types
+
+ src/hb-cff-interp-common.hh | 84
+ +++++++--------------------------------------
+ 1 file changed, 13 insertions(+), 71 deletions(-)
+
+commit 8c05b955eb4aa088b2b5df9b6415863486eaf59c
+Merge: d19b1680 01f628cf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 3 14:30:51 2018 -0500
+
+ Merge pull request #1439 from ebraminio/tracking
+
+ [aat] Expose hb_aat_layout_has_tracking API
+
+commit 01f628cf5571b8b58108ab66cfc3e929c9840e31
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Dec 3 22:04:48 2018 +0330
+
+ [aat] Expose hb_aat_layout_has_tracking API
+
+ docs/harfbuzz-sections.txt | 7 ++++---
+ src/hb-aat-layout.cc | 9 ++++++++-
+ src/hb-aat-layout.h | 8 ++++++++
+ src/hb-aat-layout.hh | 3 ---
+ test/api/fonts/aat-morx.ttf | Bin 0 -> 1620 bytes
+ test/api/fonts/aat-trak.ttf | Bin 0 -> 2456 bytes
+ test/api/test-aat-layout.c | 13 +++++++++++++
+ 7 files changed, 33 insertions(+), 7 deletions(-)
+
+commit d19b1680b53e54f449736432f369a676c394ebf8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Dec 3 10:41:37 2018 -0500
+
+ [aat] Expose a couple APIs
+
+ New API:
+ +hb_aat_layout_has_substitution()
+ +hb_aat_layout_has_positioning()
+
+ docs/harfbuzz-sections.txt | 2 ++
+ src/hb-aat-layout.cc | 20 ++++++++++++++++----
+ src/hb-aat-layout.h | 16 ++++++++++++++++
+ src/hb-aat-layout.hh | 6 ------
+ 4 files changed, 34 insertions(+), 10 deletions(-)
+
+commit 84efe0438e1cfc5b070e114b70e8c070be6119ca
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Dec 2 12:38:53 2018 -0500
+
+ [aat] Fix division sign fallout
+
+ Happened after 11d2f49af8f53340134c844173f4d8655b00dea3
+ since now nClasses is unsigned int...
+
+ src/hb-aat-layout-common.hh | 2 +-
+ ...zz-testcase-minimized-hb-shape-fuzzer-5768046065483776 | Bin 0 ->
+ 342 bytes
+ 2 files changed, 1 insertion(+), 1 deletion(-)
+
+commit 2087f5a2a743380b36399ba8a2b4ff9e93890fcf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Dec 1 20:04:45 2018 -0500
+
+ Add casts to hb_array_t<>
+
+ src/hb-open-type.hh | 13 ++++++++++---
+ src/hb-vector.hh | 2 ++
+ 2 files changed, 12 insertions(+), 3 deletions(-)
+
+commit 58d4d19947794aded4e966290b01e1034f216a7d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Dec 1 19:34:18 2018 -0500
+
+ Simplify build source list
+
+ CMakeLists.txt | 12 +--
+ src/Makefile.am | 6 --
+ src/Makefile.sources | 231
+ ++++++++++++++++++++++++---------------------------
+ 3 files changed, 111 insertions(+), 138 deletions(-)
+
+commit 967a204ee92548163a0d19678a237dcaf3720c20
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Dec 1 19:28:17 2018 -0500
+
+ Minor
+
+ test/api/hb-subset-test.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 11d2f49af8f53340134c844173f4d8655b00dea3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Dec 1 13:12:21 2018 -0500
+
+ New approach to change BigEndian casts to be int-sized
+
+ Fixes spurious warnings like:
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/1436
+
+ src/hb-open-type.hh | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+commit 50e0273ab18acd2fbb21bcf18ad487092e890b4e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Dec 1 13:03:52 2018 -0500
+
+ Change hb_assert_unsigned_t<> to hb_is_signed<>
+
+ src/hb-dsalgs.hh | 16 ++++++++++------
+ 1 file changed, 10 insertions(+), 6 deletions(-)
+
+commit c3a8b047aab47e40dc107a952b3a1472068ec932
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Dec 1 00:14:48 2018 -0500
+
+ Revert "Change BigEndian casts to be int-sized"
+
+ This reverts commit eb5ddd32bf4e458ca0af8d5784f8fd46485ad225.
+
+ Broke tests, badly. To be investigated and reenabled.
+
+ src/hb-open-type.hh | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+commit be45677ab605efc711a433323d66e4051c289252
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Dec 1 00:04:29 2018 -0500
+
+ Minor
+
+ src/hb-ot-layout-gsub-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit eb5ddd32bf4e458ca0af8d5784f8fd46485ad225
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Dec 1 00:03:01 2018 -0500
+
+ Change BigEndian casts to be int-sized
+
+ Fixes spurious warnings like:
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/1436
+
+ src/hb-open-type.hh | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+commit e8860fdcaa69e3452edd903f78599bc8fa9d109c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 23:38:24 2018 -0500
+
+ Fix more warning
+
+ src/hb-ot-cff-common.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit af349ee3487b31c2328f0a37a43d31b248ed14e5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 23:20:50 2018 -0500
+
+ Fix warning
+
+ src/hb-ot-cff-common.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 825df6dbc7fd013c68d7b5672f81e69b69bc14e7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 23:04:59 2018 -0500
+
+ [CFF] Change spaces to tabs
+
+ src/hb-cff-interp-common.hh | 389 ++++++++++++++++-----------------
+ src/hb-cff-interp-cs-common.hh | 324 ++++++++++++++--------------
+ src/hb-cff-interp-dict-common.hh | 190 ++++++++--------
+ src/hb-cff1-interp-cs.hh | 72 +++----
+ src/hb-cff2-interp-cs.hh | 76 +++----
+ src/hb-ot-cff-common.hh | 128 +++++------
+ src/hb-ot-cff1-table.cc | 4 +-
+ src/hb-ot-cff1-table.hh | 456
+ +++++++++++++++++++--------------------
+ src/hb-ot-cff2-table.cc | 4 +-
+ src/hb-ot-cff2-table.hh | 216 +++++++++----------
+ src/hb-subset-cff-common.cc | 76 +++----
+ src/hb-subset-cff-common.hh | 384 ++++++++++++++++-----------------
+ src/hb-subset-cff1.cc | 416
+ +++++++++++++++++------------------
+ src/hb-subset-cff1.hh | 2 +-
+ src/hb-subset-cff2.cc | 240 ++++++++++-----------
+ src/hb-subset-cff2.hh | 2 +-
+ 16 files changed, 1492 insertions(+), 1487 deletions(-)
+
+commit 592f39b3c4ed04a6f6cf129020358e64782c7108
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 22:54:57 2018 -0500
+
+ [CFF] Whitespace
+
+ src/hb-cff-interp-common.hh | 7 +++----
+ src/hb-cff-interp-cs-common.hh | 6 +++---
+ src/hb-cff-interp-dict-common.hh | 6 +++---
+ src/hb-cff2-interp-cs.hh | 2 +-
+ src/hb-ot-cff-common.hh | 12 ++++++------
+ src/hb-ot-cff1-table.hh | 30 +++++++++++++++---------------
+ src/hb-ot-cff2-table.hh | 12 ++++++------
+ src/hb-subset-cff-common.cc | 8 ++++----
+ src/hb-subset-cff-common.hh | 34 +++++++++++++++++-----------------
+ src/hb-subset-cff1.cc | 20 ++++++++++----------
+ src/hb-subset-cff2.cc | 18 +++++++++---------
+ 11 files changed, 77 insertions(+), 78 deletions(-)
+
+commit a2e8d1d455c5d0ae22927567cf8a9a2539cd3470
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 22:54:20 2018 -0500
+
+ Minor
+
+ src/Makefile.sources | 27 +++++++++++++--------------
+ 1 file changed, 13 insertions(+), 14 deletions(-)
+
+commit e3dc47c6357813d2dd098aad312d79e9d7c2aa18
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 22:43:22 2018 -0500
+
+ Remove generated files that were accidentally added by CFF2 branch
+
+ gtk-doc.make | 320 --
+ m4/libtool.m4 | 8369
+ -----------------------------------------------------
+ m4/ltoptions.m4 | 437 ---
+ m4/ltsugar.m4 | 124 -
+ m4/ltversion.m4 | 23 -
+ m4/lt~obsolete.m4 | 99 -
+ 6 files changed, 9372 deletions(-)
+
+commit 5e64e0f53259dbc0a3ea8e220ded15e85bbc1782
+Merge: 09096aa8 d8c69137
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 22:40:54 2018 -0500
+
+ Merge pull request #1113 from harfbuzz/cff-subset
+
+ CFF/CFF2 subsetter
+
+commit 09096aa89f1944dff94a5518bce578eba8989e74
+Author: Bruce Mitchener <bruce.mitchener@gmail.com>
+Date: Sat Dec 1 10:22:49 2018 +0700
+
+ Use nullptr instead of 0/NULL. (#1435)
+
+ * Use nullptr instead of 0/NULL.
+
+ * Update test-name-table.cc
+
+ src/hb-debug.hh | 2 +-
+ src/test-name-table.cc | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+commit d8c69137655fbe9678d1dfef0eb3c4172f8bbfc0
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 30 18:58:14 2018 -0800
+
+ undo 0u
+
+ src/hb-cff2-interp-cs.hh | 2 +-
+ src/hb-ot-cff1-table.hh | 4 ++--
+ src/hb-ot-vorg-table.hh | 2 +-
+ src/hb-subset-cff-common.hh | 4 ++--
+ src/hb-subset-cff1.cc | 4 ++--
+ 5 files changed, 8 insertions(+), 8 deletions(-)
+
+commit 2c859b3880868b30823eb00bed90dc0de873628b
+Merge: 9483da14 bb72de66
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 30 18:47:34 2018 -0800
+
+ Merge branch 'master' into cff-subset
+
+commit bb72de66ddf3ae9ae53cf68642cb228e88aa64f5
+Merge: fedd8e6c fb059082
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 21:36:35 2018 -0500
+
+ Merge pull request #1433 from harfbuzz/overload-overload
+
+ Fix ambiguous overload errors with old compilers
+
+commit fb059082138bf17a5a8616410d9a35f927f9fd85
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 20:45:40 2018 -0500
+
+ Revert ugly fixes
+
+ Now that we have 6daf45e0, revert cryptic hacks...
+
+ This reverts commit abd81ed4f5cbc5a94171747909bc6b77551cb929.
+ This reverts commit 9c6921c08c905a0cf45ba0182134e6ff910fac51.
+ This reverts commit d39760cabfe4007cefdfc45231e85e93fababac2.
+ This reverts commit fedd8e6c176dea85194693399e50243eb1c117c4.
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/1374
+
+ src/hb-aat-layout-morx-table.hh | 4 ++--
+ src/hb-face.cc | 4 ++--
+ src/hb-machinery.hh | 4 ++--
+ src/hb-ot-color-cpal-table.hh | 2 +-
+ src/hb-ot-kern-table.hh | 2 +-
+ src/hb-ot-layout-gpos-table.hh | 32 ++++++++++++++++----------------
+ src/hb-ot-layout-gsubgpos.hh | 14 +++++++-------
+ 7 files changed, 31 insertions(+), 31 deletions(-)
+
+commit dfad19ad5aefdacecca6af81917abc2670d4416f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 19:57:12 2018 -0500
+
+ Make operator [] take signed int
+
+ The built-in operator takes signed int. So, match it, such that
+ the built-in is never a better or equally-good match to our operator.
+ Fixes "ambiguous overload" errors from gcc 4.2 and VS 2008.
+
+ See https://github.com/harfbuzz/harfbuzz/issues/1374
+
+ src/hb-dsalgs.hh | 3 ++-
+ src/hb-open-type.hh | 42 ++++++++++++++++++++++++++++--------------
+ src/hb-vector.hh | 6 ++++--
+ 3 files changed, 34 insertions(+), 17 deletions(-)
+
+commit 9483da145d6da1bdfa3224fe13a5b4e9b449d19f
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 30 16:59:41 2018 -0800
+
+ redo fixes
+
+ src/hb-cff2-interp-cs.hh | 2 +-
+ src/hb-ot-cff1-table.hh | 4 ++--
+ src/hb-subset-cff-common.hh | 6 +++---
+ src/hb-subset-cff1.cc | 4 ++--
+ 4 files changed, 8 insertions(+), 8 deletions(-)
+
+commit 291da448237cdc0b5534fbc1ce2288e1aa8e7b8a
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 30 16:50:46 2018 -0800
+
+ yet another
+
+ src/hb-subset-cff-common.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b1821b9d092e4fd7fd888f4bffc341283bace461
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 30 16:31:01 2018 -0800
+
+ some more
+
+ src/hb-subset-cff-common.hh | 4 ++--
+ src/hb-subset-cff1.cc | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 9784cff55688d1ee93275e39c2339d5a486ed78b
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 30 16:07:08 2018 -0800
+
+ fix another pesky gcc error
+
+ src/hb-cff2-interp-cs.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 23a797b44365ed76fc7db25be13bd9c3580a8695
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 30 15:15:31 2018 -0800
+
+ silence picky gcc errors
+
+ src/hb-ot-cff1-table.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 9ae954f43ad1eb703d54db98ce46157370b71a9c
+Merge: 471db3aa fedd8e6c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 30 15:00:52 2018 -0800
+
+ Merge branch 'master' into cff-subset
+
+commit fedd8e6c176dea85194693399e50243eb1c117c4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 16:50:30 2018 -0500
+
+ One more.........
+
+ I wonder if there's something better to do about these :(.
+
+ In file included from hb-ot-color.cc:31:
+ hb-ot-color-cpal-table.hh: In member function 'unsigned int
+ OT::CPAL::get_size() const':
+ hb-ot-color-cpal-table.hh:118: error: ISO C++ says that these are
+ ambiguous, even though the worst conversion for the first is better
+ than the worst conversion for the second:
+
+ src/hb-ot-color-cpal-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit bc5db9b0807767ac04d6e50070d69cb9c520f06e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 16:04:52 2018 -0500
+
+ One more....
+
+ hb-ot-vorg-table.hh:96: error: ISO C++ says that these are ambiguous,
+ even though the worst conversion for the first is better than the
+ worst conversion for the second:
+ hb-vector.hh:87: note: candidate 1: const Type& hb_vector_t<Type,
+ PreallocedCount>::operator[](unsigned int) const [with Type =
+ OT::VertOriginMetric, unsigned int PreallocedCount = 8u]
+ hb-ot-vorg-table.hh:96: note: candidate 2: operator[](const T*,
+ int) <built-in>
+
+ src/hb-ot-vorg-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit d39760cabfe4007cefdfc45231e85e93fababac2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 15:55:30 2018 -0500
+
+ One more...
+
+ Sigh.
+
+ hb-ot-kern-table.hh: In member function 'int
+ OT::KernSubTableFormat3<KernSubTableHeader>::get_kerning(hb_codepoint_t,
+ hb_codepoint_t) const':
+ hb-ot-kern-table.hh:59: error: ambiguous overload for 'operator[]'
+ in 'kernValue[kernIndex[i]]'
+ hb-ot-kern-table.hh:59: note: candidates are: operator[](T*, int)
+ <built-in>
+ hb-dsalgs.hh:574: note: Type&
+ hb_array_t<Type>::operator[](unsigned int) const [with Type = const
+ OT::IntType<short int, 2u>]
+
+ src/hb-ot-kern-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9c6921c08c905a0cf45ba0182134e6ff910fac51
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 15:16:57 2018 -0500
+
+ More...
+
+ hb-ot-layout-gsubgpos.hh:1707: error: ISO C++ says that these are
+ ambiguous, even though the worst conversion for the first is better
+ than the worst conversion for the second:
+ ...
+
+ src/hb-aat-layout-morx-table.hh | 4 ++--
+ src/hb-ot-layout-gpos-table.hh | 32 ++++++++++++++++----------------
+ src/hb-ot-layout-gsubgpos.hh | 16 ++++++++--------
+ 3 files changed, 26 insertions(+), 26 deletions(-)
+
+commit f998bb2086342d6fdcd4295593eddea91396e0b6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 12:52:21 2018 -0500
+
+ More weird fixes
+
+ In file included from hb-ot-name.cc:29:
+ hb-ot-name-table.hh: In member function 'unsigned int
+ OT::name::get_size() const':
+ hb-ot-name-table.hh:157: error: ISO C++ says that these are ambiguous,
+ even though the worst conversion for the first is better than the
+ worst conversion for the second:
+ hb-open-type.hh:354: note: candidate 1: const Type&
+ OT::UnsizedArrayOf<Type>::operator[](unsigned int) const [with Type
+ = OT::NameRecord]
+ hb-ot-name-table.hh:157: note: candidate 2: operator[](const T*,
+ int) <built-in>
+ hb-ot-name-table.hh: In member function 'void
+ OT::name::accelerator_t::init(hb_face_t*)':
+ hb-ot-name-table.hh:196: error: ISO C++ says that these are ambiguous,
+ even though the worst conversion for the first is better than the
+ worst conversion for the second:
+ hb-dsalgs.hh:574: note: candidate 1: Type&
+ hb_array_t<Type>::operator[](unsigned int) const [with Type =
+ const OT::NameRecord]
+ hb-ot-name-table.hh:196: note: candidate 2: operator[](T*, int)
+ <built-in>
+ hb-ot-name-table.hh:197: error: ISO C++ says that these are ambiguous,
+ even though the worst conversion for the first is better than the
+ worst conversion for the second:
+ hb-dsalgs.hh:574: note: candidate 1: Type&
+ hb_array_t<Type>::operator[](unsigned int) const [with Type =
+ const OT::NameRecord]
+ hb-ot-name-table.hh:197: note: candidate 2: operator[](T*, int)
+ <built-in>
+ hb-ot-name-table.hh:198: error: ISO C++ says that these are ambiguous,
+ even though the worst conversion for the first is better than the
+ worst conversion for the second:
+ hb-dsalgs.hh:574: note: candidate 1: Type&
+ hb_array_t<Type>::operator[](unsigned int) const [with Type =
+ const OT::NameRecord]
+ hb-ot-name-table.hh:198: note: candidate 2: operator[](T*, int)
+ <built-in>
+ make[4]: *** [libharfbuzz_la-hb-ot-name.lo] Error 1
+ make[3]: *** [all-recursive] Error 1
+
+ src/hb-ot-name-table.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 67fd94da98f950b5feb719ac805f2a45379fc935
+Merge: abd81ed4 ae79fdaa
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 11:53:30 2018 -0500
+
+ Merge commit 'ae79fdaa7774d3f886a8f03926577c3bd2010b03'
+
+commit abd81ed4f5cbc5a94171747909bc6b77551cb929
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 11:51:26 2018 -0500
+
+ Umm. Cryptic, yes
+
+ In file included from hb-face.cc:35:
+ hb-ot-cmap-table.hh: In member function 'void
+ OT::CmapSubtableFormat4::_compiles_assertion_on_line_388() const':
+ hb-ot-cmap-table.hh:388: error: ISO C++ says that these are ambiguous,
+ even though the worst conversion for the first is better than the
+ worst conversion for the second:
+ hb-open-type.hh:354: note: candidate 1: const Type&
+ OT::UnsizedArrayOf<Type>::operator[](unsigned int) const [with Type =
+ OT::IntType<short unsigned int, 2u>]
+ hb-ot-cmap-table.hh:388: note: candidate 2: operator[](const T*,
+ int) <built-in>
+ hb-ot-cmap-table.hh: In member function 'void
+ OT::CmapSubtableFormat4::_instance_assertion_on_line_388() const':
+ hb-ot-cmap-table.hh:388: error: ISO C++ says that these are ambiguous,
+ even though the worst conversion for the first is better than the
+ worst conversion for the second:
+ hb-open-type.hh:354: note: candidate 1: const Type&
+ OT::UnsizedArrayOf<Type>::operator[](unsigned int) const [with Type =
+ OT::IntType<short unsigned int, 2u>]
+ hb-ot-cmap-table.hh:388: note: candidate 2: operator[](const T*,
+ int) <built-in>
+ hb-face.cc: In function 'hb_blob_t*
+ _hb_face_builder_data_reference_blob(hb_face_builder_data_t*)':
+ hb-face.cc:650: error: ISO C++ says that these are ambiguous, even
+ though the worst conversion for the first is better than the worst
+ conversion for the second:
+ hb-vector.hh:81: note: candidate 1: Type& hb_vector_t<Type,
+ PreallocedCount>::operator[](unsigned int) [with Type =
+ hb_face_builder_data_t::table_entry_t, unsigned int PreallocedCount
+ = 32u]
+ hb-face.cc:650: note: candidate 2: operator[](T*, int) <built-in>
+ hb-face.cc:650: error: ISO C++ says that these are ambiguous, even
+ though the worst conversion for the first is better than the worst
+ conversion for the second:
+ hb-vector.hh:81: note: candidate 1: Type& hb_vector_t<Type,
+ PreallocedCount>::operator[](unsigned int) [with Type =
+ hb_face_builder_data_t::table_entry_t, unsigned int PreallocedCount
+ = 32u]
+ hb-face.cc:650: note: candidate 2: operator[](const T*, int)
+ <built-in>
+ hb-face.cc:651: error: ISO C++ says that these are ambiguous, even
+ though the worst conversion for the first is better than the worst
+ conversion for the second:
+ hb-vector.hh:81: note: candidate 1: Type& hb_vector_t<Type,
+ PreallocedCount>::operator[](unsigned int) [with Type =
+ hb_face_builder_data_t::table_entry_t, unsigned int PreallocedCount
+ = 32u]
+ hb-face.cc:651: note: candidate 2: operator[](T*, int) <built-in>
+ hb-face.cc:651: error: ISO C++ says that these are ambiguous, even
+ though the worst conversion for the first is better than the worst
+ conversion for the second:
+ hb-vector.hh:81: note: candidate 1: Type& hb_vector_t<Type,
+ PreallocedCount>::operator[](unsigned int) [with Type =
+ hb_face_builder_data_t::table_entry_t, unsigned int PreallocedCount
+ = 32u]
+ hb-face.cc:651: note: candidate 2: operator[](const T*, int)
+ <built-in>
+
+ src/hb-face.cc | 4 ++--
+ src/hb-machinery.hh | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit ae79fdaa7774d3f886a8f03926577c3bd2010b03
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 11:51:26 2018 -0500
+
+ Umm. Cryptic, yes
+
+ hb-face.cc:650: error: ISO C++ says that these are ambiguous, even
+ though the worst conversion for the first is better than the worst
+ conversion for the second:
+ hb-vector.hh:81: note: candidate 1: Type& hb_vector_t<Type,
+ PreallocedCount>::operator[](unsigned int) [with Type =
+ hb_face_builder_data_t::table_entry_t, unsigned int PreallocedCount
+ = 32u]
+ hb-face.cc:650: note: candidate 2: operator[](T*, int) <built-in>
+
+ src/hb-face.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 0f32c95e1487ffcc37439635c3294f941eae857a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 11:31:39 2018 -0500
+
+ Fix a few more sizeof(vector[0]) errors with weird compilers
+
+ src/hb-face.cc | 4 ++--
+ src/hb-set.hh | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 88630a458b21b811075bed9e761a94c50736dc11
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 01:11:04 2018 -0500
+
+ Fix build for realz
+
+ src/hb-ot-deprecated.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 346286d04eb616c43ba8c796211fa2e5e7bf1983
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 00:44:40 2018 -0500
+
+ Fix build
+
+ src/hb-ot-deprecated.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 31f39cb41e1497a76c5838c93f9b4034089049f2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 00:38:08 2018 -0500
+
+ [post] Rename v2 to v2X
+
+ src/hb-ot-post-table.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit e3dd47e6025a7f082af4830ba483d90d9b44381f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Nov 30 00:32:12 2018 -0500
+
+ Move things
+
+ src/Makefile.sources | 1 +
+ src/hb-deprecated.h | 61 +---------------------------
+ src/hb-ot-deprecated.h | 106
+ +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot.h | 1 +
+ 4 files changed, 109 insertions(+), 60 deletions(-)
+
+commit 27a6b0a2f7255ed6fc7bfe1f10052c2e344e319b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Nov 29 16:29:30 2018 -0500
+
+ Fix build for realz
+
+ src/hb-coretext.cc | 2 +-
+ src/hb-uniscribe.cc | 10 +++++-----
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+commit e2af4dd1ecbe398c60fe5f3f370dd35400d7e1eb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Nov 29 16:03:15 2018 -0500
+
+ [uniscribe] Fix build
+
+ src/hb-uniscribe.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit bf738ba3ba80778c7feb95ece446607a250d9382
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Fri Nov 30 00:06:40 2018 +0330
+
+ [test][aat] Remove extra --shaper ot
+
+ As run-tests.py already adds it
+
+ test/shaping/data/in-house/tests/macos.tests | 64
+ ++++++++++++++--------------
+ 1 file changed, 32 insertions(+), 32 deletions(-)
+
+commit b65645bbafb3f1f9f956df3028cf4479a4bdc265
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Thu Nov 29 23:57:50 2018 +0330
+
+ [ci] Re-enable llvm-gcc-4.2 bots (#1429)
+
+ .circleci/config.yml | 48
+ ++++++++++++++++++++++++------------------------
+ 1 file changed, 24 insertions(+), 24 deletions(-)
+
+commit e7bd29ea11bd6301a332b471120a4a2cd8575d09
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Thu Nov 29 23:47:20 2018 +0330
+
+ Limit __builtin_bswap16 to GCC >= 5 as it was implemented on 4.8
+
+ src/hb-machinery.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ac0264717b949df8840b179d882a9bed2993fb74
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Nov 29 15:07:44 2018 -0500
+
+ [coretext] Fix compile
+
+ Fingers crossed.
+
+ src/hb-coretext.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5c4fead734b082e0168e6811bec4bcaa19acc36a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Nov 29 15:04:34 2018 -0500
+
+ Convert "static const hb_tag_t" constants to enum
+
+ src/hb-aat-layout-ankr-table.hh | 2 +-
+ src/hb-aat-layout-bsln-table.hh | 2 +-
+ src/hb-aat-layout-feat-table.hh | 2 +-
+ src/hb-aat-layout-just-table.hh | 2 +-
+ src/hb-aat-layout-kerx-table.hh | 2 +-
+ src/hb-aat-layout-lcar-table.hh | 2 +-
+ src/hb-aat-layout-morx-table.hh | 6 +++---
+ src/hb-aat-layout-trak-table.hh | 2 +-
+ src/hb-aat-ltag-table.hh | 2 +-
+ src/hb-ot-cmap-table.hh | 2 +-
+ src/hb-ot-color-cbdt-table.hh | 4 ++--
+ src/hb-ot-color-colr-table.hh | 2 +-
+ src/hb-ot-color-cpal-table.hh | 2 +-
+ src/hb-ot-color-sbix-table.hh | 2 +-
+ src/hb-ot-color-svg-table.hh | 2 +-
+ src/hb-ot-glyf-table.hh | 4 ++--
+ src/hb-ot-hdmx-table.hh | 2 +-
+ src/hb-ot-head-table.hh | 2 +-
+ src/hb-ot-hhea-table.hh | 4 ++--
+ src/hb-ot-hmtx-table.hh | 14 +++++++-------
+ src/hb-ot-kern-table.hh | 6 +++---
+ src/hb-ot-layout-base-table.hh | 2 +-
+ src/hb-ot-layout-gdef-table.hh | 2 +-
+ src/hb-ot-layout-gpos-table.hh | 2 +-
+ src/hb-ot-layout-gsub-table.hh | 2 +-
+ src/hb-ot-layout-jstf-table.hh | 2 +-
+ src/hb-ot-math-table.hh | 2 +-
+ src/hb-ot-maxp-table.hh | 2 +-
+ src/hb-ot-name-table.hh | 2 +-
+ src/hb-ot-os2-table.hh | 2 +-
+ src/hb-ot-post-table.hh | 2 +-
+ src/hb-ot-stat-table.hh | 2 +-
+ src/hb-ot-var-avar-table.hh | 2 +-
+ src/hb-ot-var-fvar-table.hh | 2 +-
+ src/hb-ot-var-hvar-table.hh | 8 ++++----
+ src/hb-ot-var-mvar-table.hh | 2 +-
+ src/hb-ot-vorg-table.hh | 2 +-
+ 37 files changed, 53 insertions(+), 53 deletions(-)
+
+commit 9e4138c82548c2b29a1ae8801d2c6c7c1f1a9c7a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Nov 29 15:01:10 2018 -0500
+
+ Convert misc "static const" constants to enum
+
+ src/hb-aat-layout-kerx-table.hh | 4 ++--
+ src/hb-map.hh | 2 +-
+ src/hb-ot-kern-table.hh | 4 ++--
+ src/hb-set-digest.hh | 14 +++++++-------
+ 4 files changed, 12 insertions(+), 12 deletions(-)
+
+commit 44cbd2ea3dc36312bd80860983b6616586e78c6c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Nov 29 14:53:43 2018 -0500
+
+ Convert "static const bool" constants to anonymous enum
+
+ src/hb-aat-layout-common.hh | 4 ++--
+ src/hb-aat-layout-kerx-table.hh | 4 ++--
+ src/hb-aat-layout-morx-table.hh | 8 ++++----
+ src/hb-dsalgs.hh | 16 ++++++++--------
+ src/hb-ot-kern-table.hh | 4 ++--
+ src/hb-ot-layout.cc | 4 ++--
+ 6 files changed, 20 insertions(+), 20 deletions(-)
+
+commit 861bc75349257f74c12b261abfcd5ab9e2f04863
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Nov 29 14:34:44 2018 -0500
+
+ [vector] Make pointer cast explicit
+
+ Too bad this doesn't help MSVC 2008 build, as explicit operators are
+ C++11.
+
+ src/hb-machinery.hh | 2 +-
+ src/hb-ot-cmap-table.hh | 3 ++-
+ src/hb-set.hh | 4 ++--
+ src/hb-subset.cc | 2 +-
+ src/hb-vector.hh | 4 ++--
+ 5 files changed, 8 insertions(+), 7 deletions(-)
+
+commit 72955e68256806f082439d65e6f9b5cf2e35fa8a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Nov 29 14:28:44 2018 -0500
+
+ Hand-hold older compilers
+
+ src/hb-set.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1a182e97ee71de0e78a70ff823ae17fa93a31830
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Nov 29 12:39:52 2018 -0500
+
+ [test/text-rendering-tests] Update from upstream
+
+ .../text-rendering-tests/fonts/TestGVAR-Composite-0.ttf | Bin 0 ->
+ 3136 bytes
+ .../fonts/TestGVAR-Composite-Missing.ttf | Bin 0 ->
+ 2984 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+commit 000d4b128eba58677acdc3b361829ff2f9a257b1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Nov 29 12:32:47 2018 -0500
+
+ Make shaper's override_features() override user features as well
+
+ The override_features is used to override features that are normally
+ discretionary features, but in a specific shaper are for various
+ reasons desired to be bolted on or off, because they've been used
+ for inherent shaping. As such, it makes sense that they also
+ override user features. Ie. if user turned 'liga' on, we don't
+ want Khmer shaping to become broken... Or turn 'clig' off...
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/1310
+
+ src/hb-ot-shape.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit a95d9d8c8465ebc927bc2194dffe4ea95542e54c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Nov 29 12:30:14 2018 -0500
+
+ [khmer] Move 'clig' to overrides
+
+ Prerequisite for https://github.com/harfbuzz/harfbuzz/issues/1310
+
+ src/hb-ot-shape-complex-khmer.cc | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
+
+commit 282ce7230b8bd8ad65c408cdaf1499504038247d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Nov 29 12:18:14 2018 -0500
+
+ Fix "typename outside template" issues
+
+ Nothing an extra template class wouldn't fix...
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/1419
+
+ src/hb-null.hh | 25 +++++++++++++++++++------
+ 1 file changed, 19 insertions(+), 6 deletions(-)
+
+commit dc41ecef85b094b30c612113606597b91c55351c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Nov 29 11:53:53 2018 -0500
+
+ 2.2.0
+
+ NEWS | 35 +++++++++++++++++++++++++++++++++++
+ configure.ac | 2 +-
+ src/hb-aat-layout.cc | 6 +++---
+ src/hb-aat-layout.h | 4 ++--
+ src/hb-deprecated.h | 4 ++--
+ src/hb-ot-var.cc | 8 ++++----
+ src/hb-ot-var.h | 4 ++--
+ src/hb-version.h | 6 +++---
+ 8 files changed, 52 insertions(+), 17 deletions(-)
+
commit 7b85081be4fbd6cad75dc28ae933ce920f71b22d
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Nov 29 11:34:22 2018 -0500
@@ -25,6 +2668,22 @@ Date: Thu Nov 29 11:36:05 2018 +0330
test/shaping/data/in-house/tests/macos.tests | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
+commit 471db3aa6f963ecd4ebaf66daa81ef245d30d3b8
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Nov 28 17:06:11 2018 -0800
+
+ workaround for issue #1417
+
+ src/hb-cff-interp-common.hh | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+commit 32d291ae899eb095500052bed2a22e5255a34838
+Merge: 1ecbf4d3 949655aa
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Nov 28 16:27:45 2018 -0800
+
+ Merge branch 'master' into cff-subset
+
commit 949655aa7853a4513af6b5247b9822be38f5d322
Merge: 7b78d223 d3d0f15f
Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2248,6 +4907,13 @@ Date: Tue Nov 20 11:33:33 2018 -0500
src/hb-ot-var.h | 27 ++++++++++++++-------------
1 file changed, 14 insertions(+), 13 deletions(-)
+commit 1ecbf4d3e3de7edc86651c6f805788747d6d89af
+Merge: 515f1a16 064f703c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Nov 20 17:19:05 2018 -0800
+
+ Merge branch 'master' into cff-subset
+
commit 064f703c7ac5a28803a8221720e922ea6dbd2505
Merge: be1828da 82951182
Author: Behdad Esfahbod <behdad@behdad.org>
@@ -2437,6 +5103,22 @@ Date: Mon Nov 19 11:30:40 2018 -0500
src/hb-ot-var.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
+commit 515f1a16140f78c9ec379854851f77a1b44af145
+Merge: a6da9b94 e3a1a835
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 16 17:38:47 2018 -0800
+
+ Merge branch 'master' into cff-subset
+
+commit a6da9b9415bae43c58f12a8e43b77ba31dd432a6
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 16 17:29:03 2018 -0800
+
+ fixed Charset format selection
+
+ src/hb-subset-cff1.cc | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
commit e3a1a8350a6a7933b0a100194985f4425ab9de19
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Fri Nov 16 16:53:25 2018 -0800
@@ -2571,6 +5253,36 @@ Date: Fri Nov 16 14:31:05 2018 -0800
src/hb-ot-var-fvar-table.hh | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
+commit b6903bd6c4b0c792c821e37a8e223088ae40e5fa
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 16 13:46:58 2018 -0800
+
+ ensure fdmap initialized as identity for single-FD (non-CID) fonts
+
+ src/hb-subset-cff1.cc | 13 ++++++++++---
+ src/hb-subset-cff2.cc | 2 ++
+ 2 files changed, 12 insertions(+), 3 deletions(-)
+
+commit b403be8ad98ffd2dbe95dad73e96c7ed1295d9fc
+Merge: b67a7c73 50d1a41c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 16 12:29:18 2018 -0800
+
+ Merge branch 'master' into cff-subset
+
+commit b67a7c731f041323c19ab245f0285c304d9ae3d2
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 16 12:28:24 2018 -0800
+
+ drop dotsection as hint along with test case
+
+ src/hb-subset-cff-common.hh | 4 ++++
+ src/hb-subset-cff1.cc | 1 +
+ test/api/fonts/cff1_dotsect.nohints.otf | Bin 0 -> 3132 bytes
+ test/api/fonts/cff1_dotsect.otf | Bin 0 -> 3220 bytes
+ test/api/test-subset-cff1.c | 21 +++++++++++++++++++++
+ 5 files changed, 26 insertions(+)
+
commit 50d1a41c08ad3508a94240b52df03c383ae8f1f8
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Fri Nov 16 08:52:57 2018 -0500
@@ -2700,6 +5412,50 @@ Date: Fri Nov 16 01:48:26 2018 -0500
src/hb-subset-plan.cc | 13 +++++++++++++
1 file changed, 13 insertions(+)
+commit 072c7aba92d3c92c84454a12578264f12439bb0d
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 15 15:41:46 2018 -0800
+
+ use 2-byte offset instead of 4-byte for local subrs
+
+ more than enough since local subrs immediately follow its
+ corresponding private dict, as the result 2-byte redunction for each
+ font dict with local subrs
+ updated api test expected subset fonts accordingly
+
+ src/hb-subset-cff-common.hh | 4 ++--
+ test/api/fonts/AdobeVFPrototype.abc.otf | Bin 7460 ->
+ 7456 bytes
+ test/api/fonts/AdobeVFPrototype.ac.nohints.otf | Bin 6780 ->
+ 6780 bytes
+ test/api/fonts/AdobeVFPrototype.ac.otf | Bin 6996 ->
+ 6996 bytes
+ .../fonts/SourceHanSans-Regular.41,4C2E.nohints.otf | Bin 2380 ->
+ 2376 bytes
+ test/api/fonts/SourceHanSans-Regular.41,4C2E.otf | Bin 2576 ->
+ 2572 bytes
+ test/api/fonts/SourceSansPro-Regular.abc.otf | Bin 1812 ->
+ 1808 bytes
+ test/api/fonts/SourceSansPro-Regular.ac.nohints.otf | Bin 1592 ->
+ 1592 bytes
+ test/api/fonts/SourceSansPro-Regular.ac.otf | Bin 1708 ->
+ 1704 bytes
+ test/api/fonts/cff1_seac.C0.otf | Bin 1604 ->
+ 1600 bytes
+ 10 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 9d0231cfe7c404da3b5bc360ad76180a7aded62c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 15 15:39:43 2018 -0800
+
+ fixed a subset bug when no font dicts reduce
+
+ src/hb-ot-cff-common.hh | 11 +++++++++++
+ src/hb-subset-cff-common.cc | 24 +++++++++++++-----------
+ src/hb-subset-cff1.cc | 27 ++++++---------------------
+ src/hb-subset-cff2.cc | 25 +++++--------------------
+ 4 files changed, 35 insertions(+), 52 deletions(-)
+
commit 11aa0468ac2c62ff734ba6b0f6eb43d1bd6f602b
Author: Ebrahim Byagowi <ebrahim@gnu.org>
Date: Thu Nov 15 23:10:56 2018 +0330
@@ -2737,6 +5493,34 @@ Date: Thu Nov 15 23:10:49 2018 +0330
src/hb-ot-math-table.hh | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
+commit 13735570f051c4131cdc481939799d76c38c758b
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 15 12:10:23 2018 -0800
+
+ reject nested seac
+
+ src/hb-cff1-interp-cs.hh | 4 ++++
+ src/hb-ot-cff1-table.cc | 11 ++++++-----
+ 2 files changed, 10 insertions(+), 5 deletions(-)
+
+commit c37aecd41c5b55e5ef496f3c4cc255a1e2ce7f9f
+Merge: ecdb77f0 cabe433f
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 15 11:03:46 2018 -0800
+
+ Merge branch 'master' into cff-subset
+
+commit ecdb77f0ae1ef9b129cf9195dbdaa9f6c4425ed5
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 15 10:54:15 2018 -0800
+
+ fixed CFF1 subset of std encoding & non-std charset combo
+
+ src/hb-ot-cff-common.hh | 2 --
+ src/hb-ot-cff1-table.hh | 2 ++
+ src/hb-subset-cff1.cc | 5 +++--
+ 3 files changed, 5 insertions(+), 4 deletions(-)
+
commit cabe433fbb81d314ad9e3cbed768dd13983a4477
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Nov 15 02:48:50 2018 -0500
@@ -2774,6 +5558,33 @@ Date: Wed Nov 14 14:49:34 2018 -0500
src/hb-ot-shape.hh | 6 +++---
7 files changed, 43 insertions(+), 29 deletions(-)
+commit 892ab37e7c9580e35b35a4d82a99e2ea73ac7b0b
+Merge: 3787c078 7867c2ba
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Nov 14 13:54:07 2018 -0800
+
+ Merge branch 'master' into cff-subset
+
+commit 3787c078561f1157bd04644f092c4467f63c717c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Nov 14 13:38:03 2018 -0800
+
+ Implemented seac for extents & subset along with API tests
+
+ gtk-doc.make | 321
+ +++++++++++++++++++++++++++++++++++++++-
+ src/hb-cff-interp-common.hh | 2 +-
+ src/hb-cff-interp-cs-common.hh | 7 +
+ src/hb-cff1-interp-cs.hh | 29 +++-
+ src/hb-ot-cff1-table.cc | 256 +++++++++++++++++++++++++-------
+ src/hb-ot-cff1-table.hh | 88 ++++++++---
+ src/hb-subset-plan.cc | 19 +++
+ test/api/fonts/cff1_seac.C0.otf | Bin 0 -> 1604 bytes
+ test/api/fonts/cff1_seac.otf | Bin 0 -> 2260 bytes
+ test/api/test-ot-extents-cff.c | 31 ++++
+ test/api/test-subset-cff1.c | 19 +++
+ 11 files changed, 699 insertions(+), 73 deletions(-)
+
commit 7867c2bad05fe48f9e4a1b776fb7da67b747fb4e
Author: Ebrahim Byagowi <ebrahim@gnu.org>
Date: Wed Nov 14 22:13:50 2018 +0330
@@ -3164,6 +5975,41 @@ Date: Mon Nov 12 13:01:22 2018 -0500
69 bytes
2 files changed, 1 insertion(+), 1 deletion(-)
+commit 41a8bc7fd9399def8f580b02627a77f3972cc0e9
+Merge: 0dfa584c 77bd0a64
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Nov 12 08:49:00 2018 -0800
+
+ Merge branch 'master' into cff-subset
+
+commit 0dfa584cb4af6be2852d038e9bd591f67ea9fc6e
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Nov 12 08:47:07 2018 -0800
+
+ changed Adobe company name
+
+ src/hb-cff-interp-common.hh | 2 +-
+ src/hb-cff-interp-cs-common.hh | 2 +-
+ src/hb-cff-interp-dict-common.hh | 2 +-
+ src/hb-cff1-interp-cs.hh | 2 +-
+ src/hb-cff2-interp-cs.hh | 2 +-
+ src/hb-ot-cff-common.hh | 2 +-
+ src/hb-ot-cff1-table.cc | 2 +-
+ src/hb-ot-cff1-table.hh | 2 +-
+ src/hb-ot-cff2-table.cc | 2 +-
+ src/hb-ot-cff2-table.hh | 2 +-
+ src/hb-ot-vorg-table.hh | 2 +-
+ src/hb-subset-cff-common.cc | 2 +-
+ src/hb-subset-cff-common.hh | 2 +-
+ src/hb-subset-cff1.cc | 2 +-
+ src/hb-subset-cff1.hh | 2 +-
+ src/hb-subset-cff2.cc | 2 +-
+ src/hb-subset-cff2.hh | 2 +-
+ test/api/test-ot-extents-cff.c | 2 +-
+ test/api/test-subset-cff1.c | 2 +-
+ test/api/test-subset-cff2.c | 2 +-
+ 20 files changed, 20 insertions(+), 20 deletions(-)
+
commit 3e284e02c2a5da758526360a45364a330b8ab8e9
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Sun Nov 11 22:51:34 2018 -0500
@@ -3529,6 +6375,13 @@ Date: Sat Nov 10 19:54:08 2018 -0500
src/hb-ot-var-avar-table.hh | 9 ++++-----
5 files changed, 20 insertions(+), 13 deletions(-)
+commit fb2a037f54f3cd323a447925f6534eccd1c709c1
+Merge: 87984165 b4c61130
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Sat Nov 10 16:23:11 2018 -0800
+
+ Merge branch 'master' into cff-subset
+
commit b4c61130324455bfd42095b01fa14ac901e441f1
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Sat Nov 10 16:35:39 2018 -0500
@@ -3664,6 +6517,17 @@ Date: Sat Nov 10 02:42:08 2018 +0330
src/hb-ot-glyf-table.hh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
+commit 87984165877c90bf4e0a0418a6407e44c048335d
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 9 08:59:18 2018 -0800
+
+ fixed vstem handling (lack thereof) in check_width
+
+ bug exposed by U+2261 equivalence in SourceCodePro-Regular.otf
+
+ src/hb-cff1-interp-cs.hh | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
commit 5f97fe9956274d9de4e7813d7f2e850d9ffd8224
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Fri Nov 9 10:01:50 2018 -0500
@@ -3733,6 +6597,22 @@ Date: Thu Nov 8 20:48:54 2018 +0330
src/hb-aat-layout-trak-table.hh | 12 ++++++------
2 files changed, 12 insertions(+), 11 deletions(-)
+commit 26c291aaa023d31c793b6f505c76e0dd7acbff9b
+Merge: 417963dd f9042384
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 8 09:06:49 2018 -0800
+
+ Merge branch 'master' into cff-subset
+
+commit 417963dd9f93a316e672c77493e763978bfdbc28
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 8 09:01:20 2018 -0800
+
+ got rid of Remap::fullset() as incorrect, redundant, inefficient
+
+ src/hb-ot-cff-common.hh | 22 ----------------------
+ 1 file changed, 22 deletions(-)
+
commit f90423847b07ff9c9f66be6dfa3b6071f9c7d9d3
Author: Ebrahim Byagowi <ebrahim@gnu.org>
Date: Thu Nov 8 19:17:02 2018 +0330
@@ -3779,6 +6659,19 @@ Date: Wed Nov 7 21:58:04 2018 -0500
src/hb-aat-layout.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
+commit 636a6833c57eb88ebaa92034c1f4722471f70781
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Nov 7 17:58:45 2018 -0800
+
+ fixed ends_in_hint bug
+
+ subr ends in hint itself should be regarded as hint
+ this flag should propagate to its caller if the call itself is at
+ the end of the caller
+
+ src/hb-subset-cff-common.hh | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
commit 0bf76154f1bb15aa2fc361eb725977313f103a58
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Wed Nov 7 19:11:43 2018 -0500
@@ -3806,6 +6699,20 @@ Date: Wed Nov 7 18:13:22 2018 -0500
src/hb-aat-layout-kerx-table.hh | 4 ++++
1 file changed, 4 insertions(+)
+commit 4d740206943ecb72e4be7cc4815e0a3aa3edaa9d
+Merge: e0c30b96 9d502769
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Nov 7 15:09:30 2018 -0800
+
+ Merge branch 'master' into cff-subset
+
+commit e0c30b961de87d38bff8dd49e86785a5b74fcad3
+Merge: 0996c0ff ae8fd0db
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Nov 7 15:08:55 2018 -0800
+
+ merge with cff-subset branch
+
commit 006386be3a069199ebaf22bcc55fa7233c62e0d5
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Wed Nov 7 18:04:53 2018 -0500
@@ -3819,6 +6726,34 @@ Date: Wed Nov 7 18:04:53 2018 -0500
src/hb-aat-layout-kerx-table.hh | 10 -----
2 files changed, 66 insertions(+), 34 deletions(-)
+commit 0996c0ff6279f377e2b14f08663df2ce82de2b14
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Nov 7 14:48:37 2018 -0800
+
+ implented no-desubroutinize with CFF2 along with API test
+
+ replaced AdobeVFPrototype.abc.otf with a hinted (maually) &
+ subroutinized copy
+ replaced expected results as well
+
+ src/hb-cff-interp-dict-common.hh | 4 +-
+ src/hb-cff2-interp-cs.hh | 16 +-
+ src/hb-ot-cff-common.hh | 22 +--
+ src/hb-subset-cff-common.hh | 64 +++++---
+ src/hb-subset-cff2.cc | 180
+ ++++++++++++++++++---
+ test/api/fonts/AdobeVFPrototype.abc.nohints.otf | Bin 7800 -> 0 bytes
+ test/api/fonts/AdobeVFPrototype.abc.otf | Bin 7800 ->
+ 7460 bytes
+ test/api/fonts/AdobeVFPrototype.ac.nohints.otf | Bin 7152 ->
+ 6780 bytes
+ .../fonts/AdobeVFPrototype.ac.nosubrs.nohints.otf | Bin 0 -> 6844 bytes
+ test/api/fonts/AdobeVFPrototype.ac.nosubrs.otf | Bin 0 -> 7060 bytes
+ test/api/fonts/AdobeVFPrototype.ac.otf | Bin 7336 ->
+ 6996 bytes
+ test/api/test-subset-cff2.c | 51 +++++-
+ 12 files changed, 271 insertions(+), 66 deletions(-)
+
commit 29c5302376ff2bc8f04b0fc0efba3ce40ef564a7
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Wed Nov 7 17:29:37 2018 -0500
@@ -4171,6 +7106,25 @@ Date: Wed Nov 7 12:16:38 2018 -0500
src/hb-aat-layout-kerx-table.hh | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
+commit ae8fd0dbfb57afadfe815c5bde4ad4a6485fd950
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Nov 7 09:16:12 2018 -0800
+
+ clear stack after vsindex op
+
+ src/hb-cff2-interp-cs.hh | 1 +
+ src/hb-ot-cff2-table.hh | 1 +
+ 2 files changed, 2 insertions(+)
+
+commit 7fed7d80f72b35900b41878ae59e38fd1cb49dc8
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Nov 7 09:09:13 2018 -0800
+
+ fixed off-by-one error in CFF1 Encoding lookup
+
+ src/hb-ot-cff1-table.hh | 4 ++++
+ 1 file changed, 4 insertions(+)
+
commit d5c0ca210fef315fd039e5b1825a865f36606a3f
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Wed Nov 7 12:08:44 2018 -0500
@@ -4579,6 +7533,22 @@ Date: Tue Nov 6 13:51:39 2018 -0500
src/hb-ot-kern-table.hh | 1 +
2 files changed, 2 insertions(+)
+commit 7b21319edfd6531a444846f71e87303bc09f4621
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Nov 6 13:59:07 2018 -0800
+
+ don't reject empty Dict
+
+ src/hb-cff-interp-dict-common.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 43ee0e4d006ce7b4ade4483f2c8ec3d39723fc94
+Merge: ec6817c1 bfafe208
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Nov 6 09:57:17 2018 -0800
+
+ Merge branch 'master' into cff-subset
+
commit bfafe208da11817b5ebf3751f02af2dcdf57bd19
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Tue Nov 6 12:11:45 2018 -0500
@@ -4971,6 +7941,152 @@ Date: Mon Nov 5 12:59:32 2018 -0500
src/hb-ot-var.cc | 6 ++----
7 files changed, 25 insertions(+), 27 deletions(-)
+commit ec6817c1bd82a60b84cb868e4d7ff4c65cb80ccc
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Nov 5 07:59:08 2018 -0800
+
+ remove build files accidentally pushed
+
+ INSTALL | 370 -
+ Makefile | 954 --
+ Makefile.in | 954 --
+ aclocal.m4 | 1496 ---
+ ar-lib | 270 -
+ autom4te.cache/output.0 | 23333
+ ----------------------------------------------
+ autom4te.cache/output.1 | 23333
+ ----------------------------------------------
+ autom4te.cache/output.2 | 23333
+ ----------------------------------------------
+ autom4te.cache/requests | 555 --
+ autom4te.cache/traces.0 | 3823 --------
+ autom4te.cache/traces.1 | 1229 ---
+ autom4te.cache/traces.2 | 3823 --------
+ compile | 347 -
+ config.guess | 1421 ---
+ config.h | 227 -
+ config.h.in | 226 -
+ config.log | 1560 ----
+ config.status | 2420 -----
+ config.sub | 1807 ----
+ configure | 23333
+ ----------------------------------------------
+ depcomp | 791 --
+ install-sh | 501 -
+ libtool | 11805 -----------------------
+ ltmain.sh | 11147 ----------------------
+ missing | 215 -
+ stamp-h1 | 1 -
+ test-driver | 148 -
+ 27 files changed, 139422 deletions(-)
+
+commit b721fdae662673ab706da897aaa1db126f8ca1a5
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Sun Nov 4 16:19:15 2018 -0800
+
+ fixed leaks in CFF subr subset
+
+ src/hb-ot-cff-common.hh | 10 +++++++++-
+ src/hb-subset-cff-common.hh | 10 +++++++++-
+ 2 files changed, 18 insertions(+), 2 deletions(-)
+
+commit 85f5644e8e9fe18032e37d4153c3c928d087ac6a
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Sun Nov 4 14:17:30 2018 -0800
+
+ added missing switch breaks
+
+ src/hb-subset-cff-common.hh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 1682d1bbecaeeddc8a1678a01c57c0e0023bf7c4
+Merge: d8fadec0 b605db2f
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Sun Nov 4 13:25:41 2018 -0800
+
+ Merge branch 'master' into cff-subset
+
+commit d8fadec098935335e69e46c1101da3f142824638
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Sun Nov 4 13:12:20 2018 -0800
+
+ added desubroutinize full font test profiles & expected fonts
+
+ modified subset_test_suite.py to apply desubroutinize profiles to
+ CFF only (not to TT)
+
+ ...urceSansPro-Regular.default.1FC,21,41,20,62,63.otf | Bin 3640 ->
+ 3784 bytes
+ .../SourceSansPro-Regular.default.61,62,63.otf | Bin 3400 ->
+ 3496 bytes
+ .../SourceSansPro-Regular.default.D7,D8,D9,DA,DE.otf | Bin 3596 ->
+ 3612 bytes
+ ...sPro-Regular.desubroutinize.1FC,21,41,20,62,63.otf | Bin 0 ->
+ 3640 bytes
+ .../SourceSansPro-Regular.desubroutinize.61,62,63.otf | Bin 0 ->
+ 3400 bytes
+ ...eSansPro-Regular.desubroutinize.D7,D8,D9,DA,DE.otf | Bin 0 ->
+ 3596 bytes
+ ...eSansPro-Regular.drop-hints.1FC,21,41,20,62,63.otf | Bin 3480 ->
+ 3564 bytes
+ .../SourceSansPro-Regular.drop-hints.61,62,63.otf | Bin 3276 ->
+ 3340 bytes
+ ...ourceSansPro-Regular.drop-hints.D7,D8,D9,DA,DE.otf | Bin 3448 ->
+ 3464 bytes
+ ...r.drop-hints.desubroutinize.1FC,21,41,20,62,63.otf | Bin 0 ->
+ 3480 bytes
+ ...Pro-Regular.drop-hints.desubroutinize.61,62,63.otf | Bin 0 ->
+ 3276 bytes
+ ...gular.drop-hints.desubroutinize.D7,D8,D9,DA,DE.otf | Bin 0 ->
+ 3448 bytes
+ ...-Regular.default.3042,3044,3046,3048,304A,304B.otf | Bin 6248 ->
+ 6324 bytes
+ ...-Regular.default.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 6432 ->
+ 6568 bytes
+ .../SourceHanSans-Regular.default.61,63,65,6B.otf | Bin 5428 ->
+ 5500 bytes
+ ...-Regular.default.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 6552 ->
+ 6780 bytes
+ .../japanese/SourceHanSans-Regular.default.660E.otf | Bin 5196 ->
+ 5248 bytes
+ ....otf => SourceHanSans-Regular.desubroutinize..otf} | Bin
+ ...r.desubroutinize.3042,3044,3046,3048,304A,304B.otf | Bin 0 ->
+ 6248 bytes
+ ...r.desubroutinize.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 0 ->
+ 6432 bytes
+ ...urceHanSans-Regular.desubroutinize.61,63,65,6B.otf | Bin 0 ->
+ 5428 bytes
+ ...r.desubroutinize.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 0 ->
+ 6552 bytes
+ .../SourceHanSans-Regular.desubroutinize.660E.otf | Bin 0 ->
+ 5196 bytes
+ ...gular.drop-hints.3042,3044,3046,3048,304A,304B.otf | Bin 6076 ->
+ 6132 bytes
+ ...gular.drop-hints.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 6180 ->
+ 6304 bytes
+ .../SourceHanSans-Regular.drop-hints.61,63,65,6B.otf | Bin 5312 ->
+ 5344 bytes
+ ...gular.drop-hints.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 6248 ->
+ 6472 bytes
+ .../SourceHanSans-Regular.drop-hints.660E.otf | Bin 5088 ->
+ 5140 bytes
+ ...rceHanSans-Regular.drop-hints.desubroutinize..otf} | Bin
+ ...s.desubroutinize.3042,3044,3046,3048,304A,304B.otf | Bin 0 ->
+ 6076 bytes
+ ...s.desubroutinize.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 0 ->
+ 6180 bytes
+ ...-Regular.drop-hints.desubroutinize.61,63,65,6B.otf | Bin 0 ->
+ 5312 bytes
+ ...s.desubroutinize.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 0 ->
+ 6248 bytes
+ ...HanSans-Regular.drop-hints.desubroutinize.660E.otf | Bin 0 ->
+ 5140 bytes
+ test/subset/data/profiles/desubroutinize.txt | 1 +
+ .../data/profiles/drop-hints-desubroutinize.txt | 2 ++
+ test/subset/generate-expected-outputs.py | 1 -
+ test/subset/subset_test_suite.py | 7 ++++++-
+ 38 files changed, 9 insertions(+), 2 deletions(-)
+
commit b605db2f65e62ad6727a61481f78015933dbf207
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Sun Nov 4 12:58:02 2018 -0500
@@ -5029,6 +8145,23 @@ Date: Sun Nov 4 02:25:07 2018 -0500
src/hb-ot-shape.cc | 1 -
10 files changed, 6 insertions(+), 17 deletions(-)
+commit 191ca0f15b7fc9ab959e1f6472c48839687402ec
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Sat Nov 3 22:42:22 2018 -0700
+
+ CFF1 no-desubr fixes
+
+ make sure charstring/subrs not ending with endchar/return handled
+ correctly
+ if no local subrs, skip serializing Subrs op in Private
+ misc fixes
+
+ src/hb-ot-cff-common.hh | 13 +++++++++-
+ src/hb-subset-cff-common.hh | 59
+ +++++++++++++++++++++++----------------------
+ src/hb-subset-cff1.cc | 27 +++++++++++++++------
+ 3 files changed, 62 insertions(+), 37 deletions(-)
+
commit 4eb52460c8c6dc48af240f2254f76fae065bfa97
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Sat Nov 3 21:45:39 2018 -0400
@@ -5081,6 +8214,18 @@ Date: Sat Nov 3 20:50:56 2018 -0400
+++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 95 insertions(+)
+commit 1da4de7e7b71dfde734cb77ec6acb31f574585f2
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Sat Nov 3 15:41:29 2018 -0700
+
+ fix for subset fuzzer failure
+
+ A called subr must be freshly parsed or completely parsed. otherwise
+ the prevoius parse must have terminated prematurely
+
+ src/hb-subset-cff1.cc | 3 +++
+ 1 file changed, 3 insertions(+)
+
commit 0b0b38ec1e6a815a30bef98193043d255b52c4a1
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Sat Nov 3 16:15:30 2018 -0400
@@ -5251,6 +8396,56 @@ Date: Sat Nov 3 13:03:36 2018 +0330
36 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
+commit 34b06d994a79124963d2a7432d0ec945e72bfdbd
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 2 16:40:20 2018 -0700
+
+ fixed FDSelect size calcluation
+
+ src/hb-ot-cff-common.hh | 2 +-
+ src/hb-subset-cff-common.cc | 6 +++---
+ test/api/fonts/SourceHanSans-Regular.41,3041,4C2E.otf | Bin 2576 ->
+ 3892 bytes
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 481fdfdc23f557400ad3aceeceeab07add78f005
+Merge: 1bc710a8 2840a104
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 2 15:28:09 2018 -0700
+
+ Merge branch 'cff-subset' of https://github.com/harfbuzz/harfbuzz
+ into cff-subset
+
+commit 1bc710a8c94fbe08ca3a3e535c7b6597a57883df
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Nov 2 15:28:01 2018 -0700
+
+ added CFF1 desubr api test cases & bug fixes
+
+ src/hb-cff1-interp-cs.hh | 7 --
+ src/hb-ot-cff-common.hh | 56 ++++++----
+ src/hb-subset-cff-common.hh | 100
+ +++++++++--------
+ src/hb-subset-cff1.cc | 53 ++++-----
+ .../fonts/SourceHanSans-Regular.41,3041,4C2E.otf | Bin 3892 ->
+ 2576 bytes
+ .../SourceHanSans-Regular.41,4C2E.nohints.otf | Bin 0 -> 2380 bytes
+ ...urceHanSans-Regular.41,4C2E.nosubrs.nohints.otf | Bin 0 -> 2360 bytes
+ .../SourceHanSans-Regular.41,4C2E.nosubrs.otf | Bin 0 -> 2548 bytes
+ test/api/fonts/SourceHanSans-Regular.41,4C2E.otf | Bin 2548 ->
+ 2576 bytes
+ test/api/fonts/SourceSansPro-Regular.abc.otf | Bin 3412 ->
+ 1812 bytes
+ .../api/fonts/SourceSansPro-Regular.ac.nohints.otf | Bin 3228 ->
+ 1592 bytes
+ .../SourceSansPro-Regular.ac.nosubrs.nohints.otf | Bin 0 -> 1540 bytes
+ .../api/fonts/SourceSansPro-Regular.ac.nosubrs.otf | Bin 0 -> 1632 bytes
+ test/api/fonts/SourceSansPro-Regular.ac.otf | Bin 3332 ->
+ 1708 bytes
+ test/api/test-subset-cff1.c | 122
+ +++++++++++++++++++++
+ 15 files changed, 232 insertions(+), 106 deletions(-)
+
commit 2c68f34bddbe506d0b22948562f2f59b9a5b6050
Author: Khaled Hosny <khaledhosny@eglug.org>
Date: Fri Nov 2 23:06:00 2018 +0200
@@ -5437,6 +8632,63 @@ Date: Fri Nov 2 11:16:43 2018 -0400
src/hb-ot-kern-table.hh | 5 +++++
1 file changed, 5 insertions(+)
+commit 0b2870085ddecdde8370eebc7c2bb346b1992b93
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 1 22:43:17 2018 -0700
+
+ removed unused code
+
+ src/hb-cff-interp-common.hh | 18 ------------------
+ 1 file changed, 18 deletions(-)
+
+commit 6186dbf1be4da88d9c4f1ef5cea19fd7779f29ab
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 1 17:25:23 2018 -0700
+
+ added hb_subset_input_set_desubroutinize API
+
+ hooked up with CFF1 subroutinizer
+ a renaming
+
+ src/hb-subset-cff-common.hh | 2 +-
+ src/hb-subset-cff1.cc | 4 ++--
+ src/hb-subset-input.cc | 13 +++++++++++++
+ src/hb-subset.h | 5 +++++
+ util/hb-subset.cc | 1 +
+ util/options.cc | 2 +-
+ 6 files changed, 23 insertions(+), 4 deletions(-)
+
+commit b1d0c589154d080ff519c3e80aea923185787b13
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 1 16:33:46 2018 -0700
+
+ removed extraneous ;s
+
+ src/hb-cff-interp-common.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 2840a104c1288af79cbda720afa9e37aec6fb29d
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 1 16:18:13 2018 -0700
+
+ tweaks to build with new merge
+
+ src/hb-cff2-interp-cs.hh | 11 +++++++----
+ src/hb-ot-cff2-table.cc | 9 +++++----
+ src/hb-ot-cff2-table.hh | 7 +++----
+ src/hb-subset-cff-common.cc | 12 ++++--------
+ src/hb-subset-cff-common.hh | 3 +--
+ src/hb-subset-cff1.cc | 3 +--
+ src/hb-subset-cff2.cc | 3 +--
+ 7 files changed, 22 insertions(+), 26 deletions(-)
+
+commit e600e5440b3b77294df47fae947758137ea02501
+Merge: 82248b92 de96e5c8
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 1 16:13:56 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit de96e5c81c7f473520df93052ecea162baa5a350
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Nov 1 18:13:58 2018 -0400
@@ -5464,6 +8716,34 @@ Date: Thu Nov 1 18:01:26 2018 -0400
src/hb-aat-map.hh | 2 --
1 file changed, 2 deletions(-)
+commit 82248b9287e7b208c304e761393b745604a51c6e
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 1 10:36:50 2018 -0700
+
+ fix leak attempt ^2
+
+ src/hb-subset-cff2.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a9c305c2b00b7e793dc3d8333eee43d677aebd42
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 1 10:31:21 2018 -0700
+
+ fix leaks
+
+ src/hb-subset-cff1.cc | 4 ++--
+ src/hb-subset-cff2.cc | 3 +--
+ 2 files changed, 3 insertions(+), 4 deletions(-)
+
+commit 049ce078e51bebce50b17889f3edae3db3ea39f5
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Nov 1 08:46:21 2018 -0700
+
+ fix bogus width with --no-hinting
+
+ src/hb-cff1-interp-cs.hh | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
+
commit 07ec792212063851ee41eae33792d3d90d31e6a1
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Nov 1 10:31:12 2018 -0400
@@ -5491,6 +8771,35 @@ Date: Thu Nov 1 13:39:06 2018 +0330
test/api/test-ot-color.c | 2 --
1 file changed, 2 deletions(-)
+commit d56e338a903a5a7c4f8ccd0f4d983cd492243ed6
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Oct 31 22:30:34 2018 -0700
+
+ CFF1 no-desubroutinize + no-hinting
+
+ no-desubroutinize option is disabled for now
+ code cleanup (esp. CFF1 width handling)
+ bug fixes & renaming
+
+ src/hb-cff-interp-common.hh | 49 +++
+ src/hb-cff-interp-cs-common.hh | 93 +++++-
+ src/hb-cff-interp-dict-common.hh | 45 +--
+ src/hb-cff1-interp-cs.hh | 66 +++-
+ src/hb-cff2-interp-cs.hh | 1 +
+ src/hb-ot-cff-common.hh | 85 ++---
+ src/hb-ot-cff1-table.hh | 20 +-
+ src/hb-ot-cff2-table.hh | 25 +-
+ src/hb-subset-cff-common.hh | 702
+ ++++++++++++++++++++++++++++++++++++---
+ src/hb-subset-cff1.cc | 242 +++++++++++---
+ src/hb-subset-cff2.cc | 45 +--
+ src/hb-subset-input.hh | 1 +
+ src/hb-subset-plan.cc | 1 +
+ src/hb-subset-plan.hh | 1 +
+ util/options.cc | 2 +
+ util/options.hh | 2 +
+ 16 files changed, 1130 insertions(+), 250 deletions(-)
+
commit 52a00cd87f63c8ab32413a1a9ce792a3e2ec84e2
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Wed Oct 31 19:05:53 2018 -0700
@@ -8266,6 +11575,20 @@ Date: Fri Oct 26 00:23:45 2018 +0330
docs/harfbuzz-sections.txt | 14 ++++++++++++++
1 file changed, 14 insertions(+)
+commit be746009e9b7063dcb57e30e342f9410387ef8b6
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Oct 25 13:40:40 2018 -0700
+
+ dropped support of legacy CFF CharString ops
+
+ along with test & font
+
+ src/hb-cff1-interp-cs.hh | 135
+ +-------------------------------------
+ test/api/fonts/cff1_legacyops.otf | Bin 3104 -> 0 bytes
+ test/api/test-ot-extents-cff.c | 23 -------
+ 3 files changed, 1 insertion(+), 157 deletions(-)
+
commit 1cfe702872058ebc50d6cb5543daa38fb3a7ebfb
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Oct 25 13:37:08 2018 -0700
@@ -8313,6 +11636,13 @@ Date: Thu Oct 25 13:19:34 2018 -0700
src/hb-vector.hh | 2 +-
5 files changed, 6 insertions(+), 6 deletions(-)
+commit 2ebf36010206cebdbe58bab6edf4e3bc011b6479
+Merge: 36c2c374 94e421ab
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Oct 25 13:05:06 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit 94e421abbfc7ede9aaf3c8d86bb0ff9992ea3123
Author: Ben Wagner <bungeman@chromium.org>
Date: Thu Oct 25 13:44:27 2018 -0400
@@ -8458,6 +11788,18 @@ Date: Tue Oct 23 15:45:35 2018 -0700
src/hb-machinery.hh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
+commit 36c2c374bf9c2d0ca903e601760e69bfc3da5388
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Oct 23 15:11:09 2018 -0700
+
+ removed unused multi_val from DictVal
+
+ src/hb-cff-interp-common.hh | 16 ----------------
+ src/hb-cff-interp-dict-common.hh | 3 ---
+ src/hb-ot-cff1-table.hh | 2 +-
+ src/hb-ot-cff2-table.hh | 1 -
+ 4 files changed, 1 insertion(+), 21 deletions(-)
+
commit f33ad6d69216a983624e832177895481549bdc07
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Tue Oct 23 14:31:51 2018 -0700
@@ -8528,6 +11870,13 @@ Date: Tue Oct 23 13:09:30 2018 -0700
src/hb-ot-shape.hh | 9 +++------
2 files changed, 13 insertions(+), 14 deletions(-)
+commit e1241636d60a63cbfd741288716b55797a4dc8ee
+Merge: 960267fc cf92d657
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Oct 23 11:25:51 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit cf92d6579e91d326598dcff93457fe85dfa962c2
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Tue Oct 23 03:10:56 2018 -0700
@@ -8819,6 +12168,15 @@ Date: Mon Oct 22 16:55:12 2018 -0700
src/hb-ot-color.h | 10 ++++-----
3 files changed, 38 insertions(+), 57 deletions(-)
+commit 960267fc4315a138f0963e78407e3af2ec6007af
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Oct 22 16:37:39 2018 -0700
+
+ fix build attempt ^4
+
+ src/hb-ot-cff-common.hh | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
commit 683fad062792a199e2fe86fe161f41b9389d08c3
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Mon Oct 22 16:35:03 2018 -0700
@@ -8908,6 +12266,39 @@ Date: Mon Oct 22 14:43:12 2018 -0700
src/hb-ot-color.cc | 1 +
2 files changed, 17 insertions(+), 16 deletions(-)
+commit ba055a8d53595ab49747ed3e02d90c9b6a3cf4f3
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Oct 22 16:20:04 2018 -0700
+
+ fix build attempt ^3
+
+ test/api/test-ot-extents-cff.c | 2 +-
+ test/api/test-subset-cff1.c | 1 +
+ test/api/test-subset-cff2.c | 1 +
+ 3 files changed, 3 insertions(+), 1 deletion(-)
+
+commit b11032afaefb2c84f9a4bbffe95c91f6374df802
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Oct 22 15:52:37 2018 -0700
+
+ fix build attempt ^2
+
+ src/hb-ot-cff-common.hh | 2 +-
+ test/api/test-ot-extents-cff.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 3d3df5575c5be0e3c69b99ca1d8df2cea1672aaf
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Oct 22 15:23:39 2018 -0700
+
+ fix build attempt
+
+ src/hb-ot-cff-common.hh | 5 ++++-
+ test/api/test-ot-extents-cff.c | 11 +++++------
+ test/api/test-subset-cff1.c | 19 +++++++++----------
+ test/api/test-subset-cff2.c | 11 +++++------
+ 4 files changed, 23 insertions(+), 23 deletions(-)
+
commit 0babf761c986855f9cdd1a2679380ee6a02390c8
Author: Ebrahim Byagowi <ebrahim@gnu.org>
Date: Tue Oct 23 01:33:45 2018 +0330
@@ -8982,6 +12373,13 @@ Date: Sun Oct 21 19:23:11 2018 -0700
test/api/test-ot-color.c | 30 ++++++++---------
5 files changed, 85 insertions(+), 60 deletions(-)
+commit 570b77f7d2b41262ccb20fadbee2c6b455cd06c6
+Merge: 857c5827 d440c8d3
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Oct 22 13:06:47 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit 9085a72deb041cf10edfa61d24b7c25f947f736b
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Sun Oct 21 19:08:25 2018 -0700
@@ -9030,6 +12428,13 @@ Date: Mon Oct 22 22:07:59 2018 +0330
test/api/test-ot-color.c | 21 +++++++++++++++++++++
9 files changed, 55 insertions(+), 4 deletions(-)
+commit 857c58279e82897ed69e8ade2f736073fa12883b
+Merge: 51fba41c b92b9d7e
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Oct 22 09:57:20 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit b92b9d7e5290eaa83e94fd40cddaee71628a3c2a
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Sun Oct 21 17:42:51 2018 -0700
@@ -9775,6 +13180,39 @@ Date: Fri Oct 19 08:09:53 2018 +0330
9410 bytes
13 files changed, 0 insertions(+), 0 deletions(-)
+commit 51fba41cc958ded3afc6c1e738895b0a81993e18
+Merge: e555ed96 3d9a0306
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Oct 18 13:08:42 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+commit e555ed961e86104e059861efe4245b7b146dbd3b
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Oct 18 13:04:41 2018 -0700
+
+ added flex extents test
+
+ test/api/fonts/cff1_flex.otf | Bin 0 -> 3152 bytes
+ test/api/test-ot-extents-cff.c | 23 +++++++++++++++++++++++
+ 2 files changed, 23 insertions(+)
+
+commit 8679d02b4b3f2f9147c4ea0319eb39851c4e40e6
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Oct 18 13:04:21 2018 -0700
+
+ implement flex ops for glyph extents/subset
+
+ also removed unused CSInterpEnv::move_[xy]_with_arg
+ fixed bug a width being left over on argStack with CFF1
+
+ src/hb-cff-interp-cs-common.hh | 157
+ +++++++++++++++++++++++++++++++++++------
+ src/hb-cff1-interp-cs.hh | 1 +
+ src/hb-subset-cff1.cc | 4 --
+ src/hb-subset-cff2.cc | 4 --
+ 4 files changed, 138 insertions(+), 28 deletions(-)
+
commit 3d9a0306ebb48706778fd2c487c3cacc7d508d6c
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Oct 18 05:58:17 2018 -0700
@@ -10053,6 +13491,13 @@ Date: Wed Oct 17 15:04:35 2018 -0700
.../fonts/oom-ccc61c92d589f895174cdef6ff2e3b20e9999a1a | Bin
18 files changed, 7 insertions(+), 7 deletions(-)
+commit 1f34388e8b40a77157f61c8e1a2fc7c4846c192e
+Merge: 9ade3e7b 2e7c7165
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Oct 17 09:34:48 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit 2e7c716511e8b2cfcd059fa2a2ed4cdd48b351bf
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Tue Oct 16 18:35:03 2018 -0700
@@ -10547,6 +13992,22 @@ Date: Mon Oct 15 19:46:45 2018 -0700
src/hb-ot-color-cbdt-table.hh | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
+commit 9ade3e7bb81be43b3c0811614b9b9533127894b0
+Merge: 6420ffe0 0f85edb7
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Oct 15 14:03:23 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+commit 6420ffe00fc4f4c6ffa63b80d961f70bc36c2caf
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Oct 15 14:03:18 2018 -0700
+
+ fixed type casting bug
+
+ src/hb-cff-interp-common.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
commit 0f85edb7781f4d5ec2de676979be75a0f6559d80
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Mon Oct 15 11:15:54 2018 -0700
@@ -10731,6 +14192,26 @@ Date: Sun Oct 14 14:52:17 2018 -0700
src/hb-aat-layout-common.hh | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
+commit db0d83ddc73ecf50ec4489fc10eddf3fa5835ae2
+Merge: 9228db06 56b8dd17
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Sat Oct 13 17:25:38 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+commit 9228db06f46908afd0e62f5964470c37c66ba91f
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Sat Oct 13 17:25:09 2018 -0700
+
+ added CFF1 Expert Encoding subset test & bug fixes
+
+ src/hb-ot-cff1-table.hh | 8 +++++++-
+ src/hb-subset-cff1.cc | 10 ++++++++--
+ test/api/fonts/cff1_expert.2D,F6E9,FB00.otf | Bin 0 -> 3096 bytes
+ test/api/fonts/cff1_expert.otf | Bin 0 -> 3656 bytes
+ test/api/test-subset-cff1.c | 21 +++++++++++++++++++++
+ 5 files changed, 36 insertions(+), 3 deletions(-)
+
commit 56b8dd17f677ffe97e4d917c47924e1ac7632c71
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Sat Oct 13 19:03:33 2018 -0400
@@ -10855,6 +14336,17 @@ Date: Sat Oct 13 14:00:05 2018 +0330
src/hb-ot-shape-complex.hh | 18 +++---
9 files changed, 93 insertions(+), 106 deletions(-)
+commit b64ef69b9e3d9cd4e81a2149cea3fe6e9e371cac
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Oct 12 14:14:21 2018 -0700
+
+ from encode_int removed assert hit by fuzzer
+
+ clamp the value instead
+
+ src/hb-subset-cff-common.hh | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
commit c0a6814b49e376984a0cae9d385a6f6ba8c73579
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Fri Oct 12 16:05:56 2018 -0400
@@ -10977,6 +14469,31 @@ Date: Thu Oct 11 21:18:20 2018 -0400
src/hb-font.cc | 4 ----
1 file changed, 4 deletions(-)
+commit fc0153a1d4903a57b21974cc8d0b0a82d7bc43dc
+Merge: 7d99a6ce c5510000
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Oct 12 12:16:50 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+commit 7d99a6cef80ec178c10dcf0e848394614c5e6912
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Oct 12 02:16:07 2018 -0700
+
+ overhauled error handling in CFF interpreter
+
+ minimized "if (error) return false" idiom
+
+ src/hb-cff-interp-common.hh | 138
+ +++++++++++++++++++++++----------------
+ src/hb-cff-interp-cs-common.hh | 43 ++++++------
+ src/hb-cff-interp-dict-common.hh | 72 +++++++++++---------
+ src/hb-cff1-interp-cs.hh | 72 +++++++++++---------
+ src/hb-cff2-interp-cs.hh | 50 +++++++-------
+ src/hb-ot-cff1-table.hh | 91 +++++++++++---------------
+ src/hb-ot-cff2-table.hh | 71 +++++++++-----------
+ 7 files changed, 281 insertions(+), 256 deletions(-)
+
commit c55100000bc20d7c8319cfc54294215a923ffc25
Author: David Corbett <corbett.dav@husky.neu.edu>
Date: Thu Oct 11 22:08:14 2018 -0400
@@ -11182,6 +14699,15 @@ Date: Thu Oct 11 15:03:21 2018 -0400
++++++++++++++++++++++++++++++++++++++------------
1 file changed, 46 insertions(+), 14 deletions(-)
+commit ca37172ee3908bac12cc3d97768b95ae571530d2
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Oct 11 11:55:55 2018 -0700
+
+ fixed leak
+
+ test/api/test-ot-extents-cff.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
commit 4f9e36e8cf5d9d3d3e5a1ed46149355ee5f5e9fb
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Oct 11 14:32:59 2018 -0400
@@ -11511,6 +15037,35 @@ Date: Thu Dec 28 22:59:29 2017 +0800
src/hb-common.cc | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
+commit ce6639cd27f79856466a5e8abf58f544f069e25d
+Merge: a6b6faf2 0b9d60e1
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Oct 11 10:53:48 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+commit a6b6faf2b87f113fb23cf8e040f8b7875e2daf80
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Oct 11 10:53:44 2018 -0700
+
+ Replaced CFF1 J subset font for better coverage
+
+ in api test-ot-extents-cff
+
+ test/api/fonts/SourceHanSans-Regular.41,3041,4C2E.otf | Bin 0 ->
+ 3892 bytes
+ test/api/fonts/SourceHanSans-Regular.41,3041,4E9D.otf | Bin 5864 ->
+ 0 bytes
+ test/api/fonts/SourceHanSans-Regular.41,4C2E.otf | Bin 0 ->
+ 2548 bytes
+ test/api/fonts/SourceHanSans-Regular.41,4E9D.otf | Bin 5500 ->
+ 0 bytes
+ test/api/test-ot-extents-cff.c | 15
+ +++++++++++++++
+ test/api/test-subset-cff1.c | 18
+ +++++++++---------
+ 6 files changed, 24 insertions(+), 9 deletions(-)
+
commit 0b9d60e1a1c4b7867ac907bbd7c004191a14e697
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Oct 11 13:26:58 2018 -0400
@@ -11746,6 +15301,25 @@ Date: Wed Oct 10 21:46:58 2018 -0400
src/hb-aat-layout-kerx-table.hh | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
+commit b5aa5dbb1158a5dfba29f7b119df9b4b319e8489
+Merge: af61c3b1 ab1f30bd
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Oct 10 18:36:35 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+commit af61c3b10f83a00b4862cc0cb92fc9f0856e7dd6
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Oct 10 18:35:12 2018 -0700
+
+ added vsindex test & fixed process_vsindex
+
+ src/hb-cff2-interp-cs.hh | 12 +++++-----
+ test/api/fonts/AdobeVFPrototype_vsindex.otf | Bin 0 -> 7036 bytes
+ test/api/test-ot-extents-cff.c | 33
+ ++++++++++++++++++++++++++++
+ 3 files changed, 40 insertions(+), 5 deletions(-)
+
commit 504cb68fc972c7f606bf9fc62015376382f78f45
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Wed Oct 10 21:29:46 2018 -0400
@@ -12124,6 +15698,26 @@ Date: Wed Oct 10 17:12:52 2018 +0330
++++++++++++++++++++++++++++++++-------------------
2 files changed, 100 insertions(+), 52 deletions(-)
+commit c06a5dff0b0f8d1c5aba53bcfd7fb0b680f1ca92
+Merge: 83c5298f 0537a401
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Oct 9 22:00:10 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+commit 83c5298f33e66cfd3d84d246297683f0de80c57d
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Oct 9 21:59:36 2018 -0700
+
+ added cff1_legacyops.otf as test-ot-extents-cff test case
+
+ fixed roll operator bugs uncovered by the test
+
+ src/hb-cff-interp-common.hh | 4 ++--
+ test/api/fonts/cff1_legacyops.otf | Bin 0 -> 3104 bytes
+ test/api/test-ot-extents-cff.c | 23 +++++++++++++++++++++++
+ 3 files changed, 25 insertions(+), 2 deletions(-)
+
commit 0537a40193e803d50a99cd6b993d6d9301e84ebf
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Tue Oct 9 23:35:07 2018 -0400
@@ -12289,6 +15883,15 @@ Date: Tue Oct 9 21:56:37 2018 -0400
src/hb-ot-kern-table.hh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
+commit 588518ea51b2226bdb41417946848d18c3913a67
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Oct 9 14:48:04 2018 -0700
+
+ fixed test-ot-extents-cff failure on some platforms
+
+ test/api/test-ot-extents-cff.c | 11 +++--------
+ 1 file changed, 3 insertions(+), 8 deletions(-)
+
commit be2f148da474d6dd30132c22dd467ea33a942edf
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Tue Oct 9 16:24:50 2018 -0400
@@ -12488,6 +16091,13 @@ Date: Tue Oct 9 14:12:59 2018 -0400
src/hb-ot-shape-normalize.cc | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
+commit f5f505b5120c316f06306318c6c2f0db4496ba04
+Merge: 8b349040 4035158d
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Oct 9 10:10:35 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit b314c4e9abf4236c6650a63d1287471b61f64885
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Tue Oct 9 09:23:51 2018 -0400
@@ -12639,6 +16249,13 @@ Date: Tue Oct 9 00:56:33 2018 -0400
src/hb-ucdn.cc | 15 ++++++---------
3 files changed, 18 insertions(+), 27 deletions(-)
+commit 8b349040e92b8894a7f8a609fac8070bcb110f96
+Merge: df964a09 fc509165
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Oct 8 21:46:23 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit fc50916589a300e49183b5ee598e64ca28d0bd9a
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Tue Oct 9 00:39:42 2018 -0400
@@ -12804,6 +16421,52 @@ Date: Mon Oct 8 22:26:39 2018 -0400
src/hb-unicode.h | 28 ----------------------------
3 files changed, 40 insertions(+), 30 deletions(-)
+commit df964a09319bbf5b0a7528b906311726d4f640d6
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Oct 8 15:38:05 2018 -0700
+
+ fixed test-subset-cff2
+
+ src/hb-cff2-interp-cs.hh | 7 +++----
+ src/hb-ot-cff2-table.cc | 2 +-
+ 2 files changed, 4 insertions(+), 5 deletions(-)
+
+commit a90fd8b9feeee3b02d139f2e7db774766d7855cb
+Merge: b51418f5 e42cd58c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Oct 8 15:07:58 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+commit b51418f596097aa5d1b28fb0a02b613c36bacd8e
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Oct 8 15:05:36 2018 -0700
+
+ added CFF2 get_extents
+
+ added source hb-ot-cff2-table.cc
+ augmented VariationData to return scalars
+ misc bug fixes, renaming, cleanup
+
+ src/Makefile.sources | 2 +
+ src/hb-cff-interp-common.hh | 37 ++++++-----
+ src/hb-cff-interp-cs-common.hh | 134
+ +++++++++++++++++++-------------------
+ src/hb-cff-interp-dict-common.hh | 6 +-
+ src/hb-cff2-interp-cs.hh | 102 ++++++++++++++++++++++++-----
+ src/hb-ot-cff1-table.hh | 4 +-
+ src/hb-ot-cff2-table.cc | 135
+ +++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-cff2-table.hh | 71 ++++++++++++--------
+ src/hb-ot-face.cc | 1 +
+ src/hb-ot-face.hh | 1 +
+ src/hb-ot-font.cc | 4 ++
+ src/hb-ot-layout-common.hh | 28 +++++++-
+ src/hb-subset-cff1.cc | 2 +-
+ src/hb-subset-cff2.cc | 4 +-
+ test/api/test-ot-extents-cff.c | 36 +++++++++++
+ 15 files changed, 426 insertions(+), 141 deletions(-)
+
commit 286a45641fc6732bb7cab02f06c90396834541b1
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Mon Oct 8 16:41:08 2018 -0400
@@ -13100,6 +16763,48 @@ Date: Sun Oct 7 16:31:33 2018 +0200
src/hb-coretext.cc | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
+commit 55942ad5c1ee999c9f590b8cc8fbde12e937aa6f
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Sat Oct 6 14:49:44 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+ TODO | 10 +--
+ configure.ac | 2 +-
+ src/hb-aat-layout-common.hh | 4 +-
+ src/hb-aat-layout-morx-table.hh | 9 +-
+ src/hb-aat-layout.cc | 6 ++
+ src/hb-aat-layout.hh | 2 +
+ src/hb-face.cc | 2 +-
+ src/hb-machinery.hh | 2 +-
+ src/hb-ot-cmap-table.hh | 2 +-
+ src/hb-ot-post-table.hh | 2 +-
+ src/hb-ot-shape.cc | 27 ++++--
+ src/hb-ot-shape.hh | 5 ++
+ src/hb-set.hh | 4 +-
+ src/hb-subset.cc | 2 +-
+ src/hb-vector.hh | 100
+ ++++++++++++++-------
+ test/shaping/data/text-rendering-tests/DISABLED | 35 +-------
+ .../data/text-rendering-tests/Makefile.sources | 18 ++--
+ .../data/text-rendering-tests/extract-tests.py | 18 +++-
+ .../text-rendering-tests/fonts/TestGSUBThree.ttf | Bin 0 -> 1504 bytes
+ .../fonts/TestMORXThirtyfive.ttf | Bin 0 -> 1968 bytes
+ .../fonts/TestMORXThirtyfour.ttf | Bin 0 -> 3608 bytes
+ .../fonts/TestMORXThirtysix.ttf | Bin 0 -> 1836 bytes
+ .../fonts/TestMORXThirtythree.ttf | Bin 0 -> 1520 bytes
+ .../fonts/TestMORXTwentyfour.ttf | Bin 0 -> 1828 bytes
+ .../data/text-rendering-tests/tests/GSUB-3.tests | 1 +
+ .../data/text-rendering-tests/tests/MORX-24.tests | 1 +
+ .../data/text-rendering-tests/tests/MORX-32.tests | 8 +-
+ .../data/text-rendering-tests/tests/MORX-33.tests | 3 +
+ .../data/text-rendering-tests/tests/MORX-34.tests | 1 +
+ .../data/text-rendering-tests/tests/MORX-35.tests | 2 +
+ .../data/text-rendering-tests/tests/MORX-36.tests | 1 +
+ test/shaping/run-tests.py | 19 ++--
+ util/view-cairo.hh | 2 +-
+ 33 files changed, 173 insertions(+), 115 deletions(-)
+
commit 7ee50af8366547c382047a30a94f7f5f739aabcb
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Sat Oct 6 21:31:44 2018 +0200
@@ -13211,6 +16916,36 @@ Date: Fri Oct 5 02:49:29 2018 +0200
src/hb-ot-shape.cc | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
+commit e7a045e4db39e037badcab0ad1239c0cb56c1170
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Oct 4 14:16:07 2018 -0700
+
+ fixed leak exposed by test-ot-extents-cff
+
+ src/hb-cff-interp-common.hh | 3 +++
+ src/hb-cff-interp-dict-common.hh | 4 ++++
+ 2 files changed, 7 insertions(+)
+
+commit 6238edbd8b654d105bbd191dffabc7820f0a3223
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Oct 4 13:59:36 2018 -0700
+
+ added CFF glyph extents API test
+
+ test/api/Makefile.am | 1 +
+ test/api/test-ot-extents-cff.c | 65
+ ++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 66 insertions(+)
+
+commit 0222d57c357c775f25866653700b9dcb7d5bb807
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Oct 4 09:37:57 2018 -0700
+
+ tweaked previous warning fixes
+
+ src/hb-cff-interp-common.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
commit 7b3ae5ffd202346cb3742fe0f8cfafe8c36a4bd5
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Oct 4 16:36:42 2018 +0200
@@ -13391,6 +17126,32 @@ Date: Thu Oct 4 09:24:08 2018 +0200
src/hb-aat-layout-morx-table.hh | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
+commit 3ef358909eb7e26ca9630e61c7ba142d9e94389e
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Oct 3 18:08:25 2018 -0700
+
+ fixed warnings
+
+ src/hb-cff-interp-common.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 1aeaee9dfc7ee3ca410919c41e55452a0b6b9bf6
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Oct 3 17:44:45 2018 -0700
+
+ fixed cff2 subset test data
+
+ test/api/fonts/AdobeVFPrototype.abc.nohints.otf | Bin 0 -> 7800 bytes
+ test/api/test-subset-cff2.c | 4 ++--
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 8be5a9186be3ca4c50c73f372be4dbad08ac1863
+Merge: d7b384ad 5de2d9cd
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Oct 3 17:06:18 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit 5de2d9cdbdca870901c0ba9472f5b78c48ba0a58
Author: Ebrahim Byagowi <ebrahim@gnu.org>
Date: Thu Oct 4 02:14:18 2018 +0330
@@ -13803,6 +17564,80 @@ Date: Wed Oct 3 12:29:56 2018 +0200
.../shaping/data/in-house/tests/use-syllable.tests | 3 +
7 files changed, 301 insertions(+), 245 deletions(-)
+commit d7b384ad0d0a3e1d35ef92a6e98a97bb9c367f48
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Oct 2 21:08:36 2018 -0700
+
+ silence warning ^3
+
+ src/hb-subset-cff1.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit e9cc71ac86bd771d9fcb2ee1eb620060db92ac1a
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Oct 2 20:44:30 2018 -0700
+
+ silence warning ^2
+
+ src/hb-subset-cff1.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 2700db9ade23cbf69d17a7a1802a7f144c25f8dc
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Oct 2 15:05:26 2018 -0700
+
+ rm build files
+
+ build/test/api/.libs/test-collect-unicodes | Bin 14336 -> 0 bytes
+ build/test/api/.libs/test-multithread | Bin 10936 -> 0 bytes
+ build/test/api/test-collect-unicodes | 210
+ -----------------------------
+ build/test/api/test-multithread | 210
+ -----------------------------
+ 4 files changed, 420 deletions(-)
+
+commit 51d5bf4ca2ebb9b8aa3b2777781e328fb93ceea7
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Oct 2 14:38:06 2018 -0700
+
+ silence warnings
+
+ src/hb-cff-interp-cs-common.hh | 2 +-
+ src/hb-subset-cff1.cc | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 35b64dfb57cac0d949363e9b19352dd4274c2584
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Oct 2 14:13:36 2018 -0700
+
+ silence & fix new warnings
+
+ src/hb-cff-interp-dict-common.hh | 3 ++-
+ src/hb-cff1-interp-cs.hh | 9 +++++----
+ src/hb-ot-cff-common.hh | 4 ++--
+ src/hb-subset-cff1.cc | 4 ++--
+ src/hb-subset-cff2.cc | 4 ++--
+ 5 files changed, 13 insertions(+), 11 deletions(-)
+
+commit eed7e6bbc8e7be99d59a7822a1c37bc715c379b3
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Oct 2 13:45:14 2018 -0700
+
+ redefine OpCodes as define instead of enum
+
+ in order to eradicate duplicate enum warnings
+
+ src/hb-cff-interp-common.hh | 348
+ ++++++++++++++++++++++----------------------
+ 1 file changed, 174 insertions(+), 174 deletions(-)
+
+commit 9cdd70b344b9dc34a29aeca79028cbb5d949ca1d
+Merge: 3dd43f02 6353cc1f
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Oct 2 13:43:21 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit 6353cc1f83c862910860976411a1157f7ed571bc
Author: Ebrahim Byagowi <ebrahim@gnu.org>
Date: Tue Oct 2 21:39:19 2018 +0330
@@ -14193,6 +18028,13 @@ Date: Mon Oct 1 19:09:58 2018 +0200
src/hb-ot-shape-complex-khmer.hh | 99 +++++-----
5 files changed, 270 insertions(+), 177 deletions(-)
+commit 3dd43f0234febd434d89927adf2ee19f0489c5a7
+Merge: ab16b24c eb1e6028
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Oct 1 10:22:06 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit aaaa65baa7fcfb65ae814528bdd93cc5c4ea540d
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Mon Oct 1 16:59:48 2018 +0200
@@ -14927,6 +18769,31 @@ Date: Thu Sep 27 11:53:17 2018 +0330
.circleci/config.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
+commit ab16b24cc94389ac66a9353327d2a87a7c230ed4
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Sep 26 18:51:36 2018 -0700
+
+ tweaked get_fd fix
+
+ src/hb-ot-cff-common.hh | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+commit dac70f252a84e1a255375eaacffc2cb3f3fc6e58
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Sep 26 16:30:26 2018 -0700
+
+ Added CFF1 J font subset to api test
+
+ Also fixed FDSelect3_4::get_fd
+ Fixed test_subset_cff1_strip_hints (wrong font names!)
+
+ src/hb-ot-cff-common.hh | 2 +-
+ .../fonts/SourceHanSans-Regular.41,3041,4E9D.otf | Bin 0 -> 5864 bytes
+ test/api/fonts/SourceHanSans-Regular.41,4E9D.otf | Bin 0 -> 5500 bytes
+ test/api/test-subset-cff1.c | 25
+ +++++++++++++++++++--
+ 4 files changed, 24 insertions(+), 3 deletions(-)
+
commit 662f7d7e8bfa77b21ffa05e853f61dda993dcc8a
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Wed Sep 26 18:42:37 2018 -0400
@@ -15062,6 +18929,38 @@ Date: Tue Sep 25 09:24:35 2018 +0330
.circleci/config.yml | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
+commit ae7f0e83d4417fac2455c44eaea15b3cca03d18e
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Sep 24 22:49:44 2018 -0700
+
+ fixed memory leaks
+
+ in CFF1 & CFF2 accelerators, VORG subsetter
+
+ src/hb-ot-cff1-table.hh | 2 ++
+ src/hb-ot-cff2-table.hh | 2 ++
+ src/hb-ot-vorg-table.hh | 3 +++
+ 3 files changed, 7 insertions(+)
+
+commit 258b456566abd266657725b3fc4e70f18b370d5d
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Sep 24 16:50:47 2018 -0700
+
+ Added CFF1 & CFF2 api tests
+
+ test/api/Makefile.am | 4 +
+ test/api/fonts/AdobeVFPrototype.abc.otf | Bin 0 -> 7800 bytes
+ test/api/fonts/AdobeVFPrototype.ac.nohints.otf | Bin 0 -> 7152 bytes
+ test/api/fonts/AdobeVFPrototype.ac.otf | Bin 0 -> 7336 bytes
+ test/api/fonts/SourceSansPro-Regular.abc.otf | Bin 0 -> 3412 bytes
+ .../api/fonts/SourceSansPro-Regular.ac.nohints.otf | Bin 0 -> 3228 bytes
+ test/api/fonts/SourceSansPro-Regular.ac.otf | Bin 0 -> 3332 bytes
+ test/api/test-subset-cff1.c | 104
+ +++++++++++++++++++++
+ test/api/test-subset-cff2.c | 104
+ +++++++++++++++++++++
+ 9 files changed, 212 insertions(+)
+
commit 8282e881b51363811078bce53fad6aa5b41f7b41
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Mon Sep 24 19:43:01 2018 -0400
@@ -15187,6 +19086,13 @@ Date: Mon Sep 24 13:11:34 2018 -0400
src/check-static-inits.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
+commit 0604bf2b3846b200c56447ffe542bf69c0529a06
+Merge: 76e54d2b 45f5aa97
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Sep 24 10:09:25 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit e45ba31dc723988150ef766758fa89fecd50ca03
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Mon Sep 24 13:04:48 2018 -0400
@@ -15422,6 +19328,47 @@ Date: Sat Sep 22 16:45:31 2018 +0330
test/api/test-font.c | 1 +
1 file changed, 1 insertion(+)
+commit 76e54d2bd804414183858ca198157050419dfe6c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Sep 21 12:16:36 2018 -0700
+
+ fixed subroutinized CFF2 flattening
+
+ and some code cleanup
+
+ src/hb-cff-interp-common.hh | 2 +-
+ src/hb-cff-interp-cs-common.hh | 13 -------------
+ src/hb-cff2-interp-cs.hh | 7 ++++---
+ 3 files changed, 5 insertions(+), 17 deletions(-)
+
+commit 321e592333014f713557e8ce8041dcb5de710218
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Sep 20 10:31:06 2018 -0700
+
+ Added desubroutinize option to generate-expected-outputs.py
+
+ Currently hb-subset always desubroutinizes CFF fonts.
+ Note that even with this option fonttools won't generate the expected
+ subset CFF fonts. They were manually created & tweaked to match
+ hb-subset output.
+
+ test/subset/generate-expected-outputs.py | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit f212c050ad50898d5105d1d3a6ea3498f94ee462
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Sep 20 09:45:43 2018 -0700
+
+ Added VORG struct and its subsetter
+
+ new file: hb-ot-vorg-table.hh
+
+ src/Makefile.sources | 1 +
+ src/hb-ot-vorg-table.hh | 163
+ ++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-subset.cc | 5 +-
+ 3 files changed, 168 insertions(+), 1 deletion(-)
+
commit 5fd8bce945e7efaa48d0c29eb8b2700027bd3c0b
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Wed Sep 19 22:34:09 2018 -0400
@@ -15431,6 +19378,46 @@ Date: Wed Sep 19 22:34:09 2018 -0400
src/hb-aat-layout-morx-table.hh | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
+commit 1377adc8a88c627891cb8b9cea511d8f9f5324f9
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Sep 19 17:00:10 2018 -0700
+
+ Added SourceHanSans-Regular for CFF subset test
+
+ Disabled FDSelect serialization to format 0 for compatibility with
+ fonttools
+
+ src/hb-subset-cff-common.cc | 16
+ +++++++++++++---
+ .../japanese/SourceHanSans-Regular.default..otf | Bin 0 ->
+ 2340 bytes
+ ...Regular.default.3042,3044,3046,3048,304A,304B.otf | Bin 0 ->
+ 6248 bytes
+ ...Regular.default.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 0 ->
+ 6432 bytes
+ .../SourceHanSans-Regular.default.61,63,65,6B.otf | Bin 0 ->
+ 5428 bytes
+ ...Regular.default.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 0 ->
+ 6552 bytes
+ .../japanese/SourceHanSans-Regular.default.660E.otf | Bin 0 ->
+ 5196 bytes
+ .../japanese/SourceHanSans-Regular.drop-hints..otf | Bin 0 ->
+ 2188 bytes
+ ...ular.drop-hints.3042,3044,3046,3048,304A,304B.otf | Bin 0 ->
+ 6076 bytes
+ ...ular.drop-hints.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 0 ->
+ 6180 bytes
+ .../SourceHanSans-Regular.drop-hints.61,63,65,6B.otf | Bin 0 ->
+ 5312 bytes
+ ...ular.drop-hints.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 0 ->
+ 6248 bytes
+ .../SourceHanSans-Regular.drop-hints.660E.otf | Bin 0 ->
+ 5088 bytes
+ test/subset/data/fonts/SourceHanSans-Regular.otf | Bin 0 ->
+ 16427580 bytes
+ test/subset/data/tests/japanese.tests | 1 +
+ 15 files changed, 14 insertions(+), 3 deletions(-)
+
commit 0739b28169eb63332b31420deb5bf58b5446f154
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Wed Sep 19 17:32:21 2018 -0400
@@ -15485,6 +19472,106 @@ Date: Wed Sep 19 16:02:56 2018 -0400
src/hb-aat-layout-morx-table.hh | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
+commit ebeccf3e63bff96b7a7766dea566704a9cbeae44
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Sep 18 17:24:30 2018 -0700
+
+ fixed char widths & standard Encoding in subset CFF
+
+ also merged flush_n_args to flush_args into one
+ takes start index of the arguments on stack instead of count
+
+ src/hb-cff-interp-cs-common.hh | 20 +++++---------------
+ src/hb-cff1-interp-cs.hh | 11 +++++++----
+ src/hb-cff2-interp-cs.hh | 2 +-
+ src/hb-subset-cff1.cc | 22 ++++++++++++++++------
+ src/hb-subset-cff2.cc | 12 ++++++------
+ 5 files changed, 35 insertions(+), 32 deletions(-)
+
+commit bf4eb2e4cf8d08b674f81954e22b331cca2b3721
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Sep 18 15:53:37 2018 -0700
+
+ Added SourceSansPro-Regular along as CFF full-font test case
+
+ derived "expected" subset fonts from fonttools then manually tweaked
+ further so they resemble hb-subset output
+
+ ...ourceSansPro-Regular.default.1FC,21,41,20,62,63.otf | Bin 0 ->
+ 3640 bytes
+ .../SourceSansPro-Regular.default.61,62,63.otf | Bin 0 ->
+ 3400 bytes
+ .../SourceSansPro-Regular.default.D7,D8,D9,DA,DE.otf | Bin 0 ->
+ 3596 bytes
+ ...ceSansPro-Regular.drop-hints.1FC,21,41,20,62,63.otf | Bin 0 ->
+ 3480 bytes
+ .../SourceSansPro-Regular.drop-hints.61,62,63.otf | Bin 0 ->
+ 3276 bytes
+ ...SourceSansPro-Regular.drop-hints.D7,D8,D9,DA,DE.otf | Bin 0 ->
+ 3448 bytes
+ test/subset/data/fonts/SourceSansPro-Regular.otf | Bin 0 ->
+ 220852 bytes
+ test/subset/data/tests/full-font.tests | 1 +
+ test/subset/run-tests.py | 4 ++--
+ test/subset/subset_test_suite.py | 5 +++++
+ 10 files changed, 8 insertions(+), 2 deletions(-)
+
+commit e75e7224c9c02ab99e132a51fe8801e29827cac5
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Sep 17 15:34:39 2018 -0700
+
+ include curve control points in extents
+
+ this makes results consistent with FT
+ also optimized handling of path end points
+
+ src/hb-cff-interp-cs-common.hh | 6 +++---
+ src/hb-ot-cff1-table.cc | 27 +++++++++++++++++++++++++--
+ 2 files changed, 28 insertions(+), 5 deletions(-)
+
+commit 98b94f8ba53276887ab583eeeb4cb097c7b84b2c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Sep 17 13:56:39 2018 -0700
+
+ fix static_assert failure in OffsetTo<TopDict>
+
+ src/hb-ot-cff2-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit d050ab8d3e73debfb414fc8c9426180459150b61
+Merge: f0a4e0c2 388ab916
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Sep 17 13:07:29 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+commit f0a4e0c2ca5ee0225765590384216d5d5367de7e
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Sep 17 12:11:56 2018 -0700
+
+ fix build attempt ^3
+
+ src/hb-ot-cff1-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f0d74971aee5ce309bdfa2a4397667f14ee15f42
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Sep 17 12:02:12 2018 -0700
+
+ fix attempt ^2: unuse INT32_MAX/MIN
+
+ src/hb-ot-cff1-table.cc | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 4d963a2711e6035e97e246241d8420273363f857
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Sep 17 11:28:33 2018 -0700
+
+ fix build attempt
+
+ src/hb-ot-cff1-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
commit 388ab91642734e1ba0d7a4a4f29a17b15f1b249d
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Mon Sep 17 19:29:34 2018 +0200
@@ -15495,6 +19582,31 @@ Date: Mon Sep 17 19:29:34 2018 +0200
++++++++++++++++-------------------------
1 file changed, 33 insertions(+), 54 deletions(-)
+commit c0c85b852d37dad75eeef473e6dd3ec91a3b559b
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Sep 17 11:14:56 2018 -0700
+
+ implemented get_glyph_extents with CFF1
+
+ Implemented path operators in a new struct PathProc hooked up
+ to CSOpSet
+ Added current point to CSInterpEnv
+
+ src/hb-cff-interp-common.hh | 86 ++++++++-
+ src/hb-cff-interp-cs-common.hh | 425
+ +++++++++++++++++++++++++++++++++++++++--
+ src/hb-cff1-interp-cs.hh | 18 +-
+ src/hb-cff2-interp-cs.hh | 10 +-
+ src/hb-null.hh | 2 +-
+ src/hb-ot-cff1-table.cc | 82 ++++++++
+ src/hb-ot-cff1-table.hh | 95 +++++----
+ src/hb-ot-face.cc | 1 +
+ src/hb-ot-face.hh | 1 +
+ src/hb-ot-font.cc | 2 +
+ src/hb-subset-cff1.cc | 4 +-
+ src/hb-subset-cff2.cc | 10 +-
+ 12 files changed, 657 insertions(+), 79 deletions(-)
+
commit d8d1e7df0057c79f54d855b7bfec2d21f59b09e8
Author: David Corbett <corbett.dav@husky.neu.edu>
Date: Mon Sep 17 11:09:51 2018 -0400
@@ -15764,6 +19876,13 @@ Date: Fri Sep 14 10:58:00 2018 +0200
src/hb-open-file.hh | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
+commit f2c4720ae696096d90493db218ef1283681561e7
+Merge: 1234a813 ca746f26
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Sep 13 12:44:00 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit ca746f261e1e54cec2f9c8bc7a6f930491e19418
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Sep 13 20:35:21 2018 +0200
@@ -15815,6 +19934,16 @@ Date: Thu Sep 13 20:21:54 2018 +0200
src/hb-ot-layout-gsubgpos.hh | 10 +++++-----
3 files changed, 17 insertions(+), 17 deletions(-)
+commit 1234a8136891429bb7353f47480595f44615f322
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Sep 13 10:55:56 2018 -0700
+
+ add head table to CFF/CFF2
+
+ src/hb-ot-cff1-table.hh | 4 ++++
+ src/hb-ot-cff2-table.hh | 4 ++++
+ 2 files changed, 8 insertions(+)
+
commit 180a88a96ce327e4103df3635c73559de65d1546
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Sep 13 19:19:57 2018 +0200
@@ -15950,6 +20079,116 @@ Date: Thu Sep 13 16:29:49 2018 +0200
src/hb-open-type.hh | 26 +++++++++++++++++++-------
1 file changed, 19 insertions(+), 7 deletions(-)
+commit 3cae9c75153277b9cfaaba20e0de84e420aeb1eb
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Sep 12 17:23:08 2018 -0700
+
+ fixed hb_plan_subset_cff_fdselect
+
+ FDSelect3/4 sentinel size wasn't taken into account
+
+ src/hb-subset-cff-common.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 0f159a38a62bbf1b7fb267694a5d91d8135da625
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Sep 12 16:08:54 2018 -0700
+
+ fixed serialize_fdselect_3_4
+
+ src/hb-ot-cff-common.hh | 6 ++++
+ src/hb-ot-cff1-table.hh | 6 ----
+ src/hb-subset-cff-common.cc | 68
+ ++++++++++++++++++++++++++-------------------
+ src/hb-subset-cff-common.hh | 10 +++----
+ src/hb-subset-cff1.cc | 12 ++++----
+ src/hb-subset-cff2.cc | 12 ++++----
+ 6 files changed, 63 insertions(+), 51 deletions(-)
+
+commit 1608481d88919ca748e367146e3a78458d5bbe8f
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Sep 12 13:22:19 2018 -0700
+
+ fixed bugs in Charset serialization
+
+ also some code cleanup
+
+ src/hb-ot-cff1-table.hh | 4 ++--
+ src/hb-subset-cff1.cc | 44 ++++++++++++++++++++------------------------
+ 2 files changed, 22 insertions(+), 26 deletions(-)
+
+commit f45ac6296add6435ea5a902f7519187414aa8092
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Sep 11 22:41:50 2018 -0700
+
+ fixed name mixup in Remap::reset
+
+ it was causing inconsistent Strings Index subset results
+
+ src/hb-ot-cff-common.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 497e7fb264ec5cb799c038cbe693b70410b18da3
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Sep 11 16:47:55 2018 -0700
+
+ misc bug fixes
+
+ Added OpCode_FontMatrix to TopDictOpSet (yet to parse values)
+ fixed a wrong assert in encode_int
+
+ src/hb-cff-interp-dict-common.hh | 3 +++
+ src/hb-subset-cff-common.hh | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit 5b453f77f804cd8421a45d8276ed3e04041da23c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Sep 11 16:20:39 2018 -0700
+
+ fixed off-by-one error with offSize
+
+ src/hb-ot-cff-common.hh | 5 +++--
+ src/hb-subset-cff1.cc | 4 ++--
+ src/hb-subset-cff2.cc | 2 +-
+ 3 files changed, 6 insertions(+), 5 deletions(-)
+
+commit 1499029a9695e26beaf72e11287be60ad9e40cfe
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Sep 11 13:56:52 2018 -0700
+
+ fixed a bug
+
+ src/hb-cff-interp-dict-common.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0bd5912a08698fb7880e1354e45bf63ef45125a5
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Sep 11 13:24:27 2018 -0700
+
+ make parse_bcd locale free
+
+ src/hb-cff-interp-dict-common.hh | 92
+ +++++++++++++++++++++++++++++-----------
+ 1 file changed, 68 insertions(+), 24 deletions(-)
+
+commit bb38d0f66388ec37ee9b0e81176d60c66fc17a19
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Sep 11 10:43:15 2018 -0700
+
+ Implement parse_bcd
+
+ src/hb-cff-interp-common.hh | 15 --------------
+ src/hb-cff-interp-dict-common.hh | 44
+ ++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 44 insertions(+), 15 deletions(-)
+
+commit 45e564a51917475ef6481825a6efb5b99bf1912e
+Merge: c6f75c30 d5c50927
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Sep 11 09:46:37 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit bd75fd45cdbd0edb24568326bb7fde59d299a82c
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Tue Sep 11 18:12:26 2018 +0200
@@ -16258,6 +20497,17 @@ Date: Thu Jan 25 14:22:03 2018 -0500
src/hb-ot-shape.cc | 1 +
6 files changed, 37 insertions(+), 10 deletions(-)
+commit c6f75c3049685440d166bd4169b36abac2df4fdd
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Sep 10 17:02:31 2018 -0700
+
+ fix build attempt
+
+ src/hb-ot-cff1-table.hh | 70
+ ++++++++++++++++++++++++-------------------------
+ src/hb-subset-cff1.cc | 16 +++++------
+ 2 files changed, 43 insertions(+), 43 deletions(-)
+
commit 96471fe8593575deceb44d3757c227f65f10a25e
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Tue Sep 11 01:39:23 2018 +0200
@@ -16267,6 +20517,20 @@ Date: Tue Sep 11 01:39:23 2018 +0200
src/hb-uniscribe.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
+commit cc52e53cf0cb76809145ae7407a8b613e9e61153
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Sep 10 16:27:49 2018 -0700
+
+ Removed unused subr subset code
+
+ src/hb-subset-cff-common.hh | 98
+ ++-------------------------------------------
+ src/hb-subset-cff1.cc | 92
+ +++++-------------------------------------
+ src/hb-subset-cff2.cc | 90
+ ++++-------------------------------------
+ 3 files changed, 22 insertions(+), 258 deletions(-)
+
commit becd84aa2f2902ea9d2d1677b28945e103a68816
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Tue Sep 11 01:26:18 2018 +0200
@@ -16325,6 +20589,27 @@ Date: Mon Sep 10 23:29:26 2018 +0200
src/hb-ot-post-table.hh | 5 +++--
15 files changed, 113 insertions(+), 110 deletions(-)
+commit 1666b89e300c86347dc82131423463cbfed8cc0f
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Sep 10 16:00:20 2018 -0700
+
+ subset CFF1 String Index
+
+ Repurposed FDMap as Remap then subclassed for remapping SIDs
+ misc code cleanup
+
+ src/hb-cff-interp-common.hh | 2 -
+ src/hb-cff-interp-dict-common.hh | 12 +-
+ src/hb-ot-cff-common.hh | 96 +++++++++--
+ src/hb-ot-cff1-table.hh | 251 +++++++++++++++++++----------
+ src/hb-ot-cff2-table.hh | 12 +-
+ src/hb-subset-cff-common.cc | 24 +--
+ src/hb-subset-cff-common.hh | 20 ++-
+ src/hb-subset-cff1.cc | 334
+ ++++++++++++++++++++++++++++++++-------
+ src/hb-subset-cff2.cc | 8 +-
+ 9 files changed, 565 insertions(+), 194 deletions(-)
+
commit 9507b05a7a65962d5d02eb424e4f5d8570976f4e
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Mon Sep 10 23:18:07 2018 +0200
@@ -16518,6 +20803,13 @@ Date: Fri Sep 7 15:02:57 2018 -0400
src/hb-set.hh | 12 ++++++------
8 files changed, 18 insertions(+), 18 deletions(-)
+commit 1e88b1755c37eaa171c08f7bedb93f110238c80f
+Merge: 22b88632 ebe67137
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Sep 7 10:50:55 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit ebe67137ab3559c2c6aaf53442ca223cb34df5af
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Fri Sep 7 10:46:13 2018 -0400
@@ -16536,6 +20828,58 @@ Date: Fri Sep 7 10:24:22 2018 -0400
src/hb-subset.cc | 3 +++
1 file changed, 3 insertions(+)
+commit 22b88632d5bd3676642b0a1d93f27e47438c140b
+Merge: 2a74536a 21bf1470
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Sep 6 22:27:44 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+commit 2a74536aae443a8b7f23ed018dec14a013c04dfe
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Sep 6 18:26:13 2018 -0700
+
+ fix build attempt ^2
+
+ Added hb-ot-cff1-table.cc to hb-subset sources
+ Deleted unused variable (charset)
+
+ src/Makefile.sources | 1 +
+ src/hb-subset-cff1.cc | 1 -
+ 2 files changed, 1 insertion(+), 1 deletion(-)
+
+commit 55268df9d4b287883c8266e316cda44f4011f424
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Sep 6 17:56:05 2018 -0700
+
+ fix build attempt
+
+ Added HB_INTERNAL to static funtion declarations
+
+ src/hb-ot-cff1-table.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit aca73c9df2054f62cf10a5c27bc5fa7823747f8b
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Sep 6 17:28:15 2018 -0700
+
+ subset CFF1 Encoding & Charset
+
+ fixed misc Charset bugs
+ added source file hb-ot-cff1.table.cc
+ renamed things for clarity & consistency
+
+ src/Makefile.sources | 1 +
+ src/hb-cff-interp-dict-common.hh | 15 +-
+ src/hb-ot-cff-common.hh | 34 ++--
+ src/hb-ot-cff1-table.cc | 130 +++++++++++++
+ src/hb-ot-cff1-table.hh | 403
+ ++++++++++++++++++++++++++++++++-------
+ src/hb-ot-cff2-table.hh | 24 +--
+ src/hb-subset-cff1.cc | 247 ++++++++++++++++++++----
+ src/hb-subset-cff2.cc | 30 +--
+ 8 files changed, 737 insertions(+), 147 deletions(-)
+
commit 21bf147054f6b5bd1c430c0e02a8c4058ed229a1
Author: Garret Rieger <grieger@google.com>
Date: Wed Sep 5 18:04:52 2018 -0700
@@ -16585,6 +20929,43 @@ Date: Mon Sep 3 20:50:11 2018 -0700
src/hb-vector.hh | 2 ++
4 files changed, 81 insertions(+), 25 deletions(-)
+commit 5ea03d2951375bfcc1258c2c0b5c33efc6ebf7f8
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Sep 4 11:29:15 2018 -0700
+
+ fix build by untemplatizing DictOpSet & DictVal
+
+ as they aren't instantiated with BlendArg (yet)
+
+ src/hb-cff-interp-dict-common.hh | 21 +++++++++------------
+ src/hb-cff2-interp-cs.hh | 1 -
+ src/hb-ot-cff1-table.hh | 8 ++++----
+ src/hb-ot-cff2-table.hh | 16 ++++++++--------
+ src/hb-subset-cff-common.hh | 4 ++--
+ 5 files changed, 23 insertions(+), 27 deletions(-)
+
+commit f2d299b0b75fd110cdc6b16de31e7212e292cc14
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Tue Sep 4 10:25:21 2018 -0700
+
+ Drop hints from CFF2 charstrings
+
+ Templatized ArgStack so it may store the default value along with
+ blend deltas as BlendArg while parsing blend operator arguments in
+ CFF2 charstring
+ Added get_region_count() method to VarRegionList & VariationStore
+
+ src/hb-cff-interp-common.hh | 67 +++++++++++++++++++++++++++------
+ src/hb-cff1-interp-cs.hh | 5 ++-
+ src/hb-cff2-interp-cs.hh | 91
+ +++++++++++++++++++++++++++++++++++++++------
+ src/hb-ot-cff2-table.hh | 22 ++++++-----
+ src/hb-ot-layout-common.hh | 6 +++
+ src/hb-subset-cff-common.hh | 60 ++++++++++++++++--------------
+ src/hb-subset-cff1.cc | 5 ++-
+ src/hb-subset-cff2.cc | 54 ++++++++++++++++++++++-----
+ 8 files changed, 235 insertions(+), 75 deletions(-)
+
commit 3f00d0b0df14d69859b15568ff28a810d08f59ea
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Mon Sep 3 18:54:32 2018 -0700
@@ -16767,6 +21148,46 @@ Date: Fri Aug 31 16:31:00 2018 -0700
src/hb-subset.hh | 21 +++++++++++++++++++++
9 files changed, 31 insertions(+), 6 deletions(-)
+commit fcf177885b4c3d732ffeb82936da906969a269d3
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Aug 31 16:28:47 2018 -0700
+
+ templatized ArgStack as a prep to store blends
+
+ src/hb-cff-interp-common.hh | 46
+ +++++++++++++++++++++---------------
+ src/hb-cff-interp-cs-common.hh | 41 ++++++++++++++++++--------------
+ src/hb-cff-interp-dict-common.hh | 35 ++++++++++++++++-----------
+ src/hb-cff1-interp-cs.hh | 15 +++++++-----
+ src/hb-cff2-interp-cs.hh | 14 +++++++----
+ src/hb-ot-cff1-table.hh | 32 ++++++++++++-------------
+ src/hb-ot-cff2-table.hh | 51
+ ++++++++++++++++++++++++++--------------
+ src/hb-subset-cff-common.hh | 4 ++--
+ src/hb-subset-cff1.cc | 1 -
+ src/hb-subset-cff2.cc | 2 +-
+ 10 files changed, 142 insertions(+), 99 deletions(-)
+
+commit 968168bf0e369927cd6a7f63608d844abe123a7b
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Aug 31 13:28:16 2018 -0700
+
+ drop hints from CFF1 charstrings
+
+ renamed confusing Stack.size to Stack.count
+
+ src/hb-cff-interp-common.hh | 43 +++++++-----
+ src/hb-cff-interp-cs-common.hh | 140
+ +++++++++++++++++----------------------
+ src/hb-cff-interp-dict-common.hh | 4 +-
+ src/hb-cff1-interp-cs.hh | 14 ++--
+ src/hb-cff2-interp-cs.hh | 18 ++---
+ src/hb-ot-cff1-table.hh | 26 ++++----
+ src/hb-ot-cff2-table.hh | 20 +++---
+ src/hb-subset-cff1.cc | 53 ++++++++-------
+ src/hb-subset-cff2.cc | 69 +++++++++----------
+ 9 files changed, 190 insertions(+), 197 deletions(-)
+
commit aba0a945c5f8724cc7bd1a9b7f7b5df1c64b03f4
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Fri Aug 31 13:25:19 2018 -0700
@@ -16800,6 +21221,19 @@ Date: Fri Aug 31 13:00:57 2018 -0700
src/hb-ot-shape-complex-arabic-fallback.hh | 1 -
1 file changed, 1 deletion(-)
+commit 8c5e03b5415f83312719ebb3cd284229e52a4843
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Aug 30 17:21:56 2018 -0700
+
+ Added drop_hints to SubrFlattener
+
+ src/hb-cff-interp-cs-common.hh | 20 +++++++++++++++++++-
+ src/hb-subset-cff-common.hh | 18 ++++++++++++++----
+ src/hb-subset-cff1.cc | 35 ++++++++++++++++++++++------------
+ src/hb-subset-cff2.cc | 43
+ ++++++++++++++++++++++++++----------------
+ 4 files changed, 83 insertions(+), 33 deletions(-)
+
commit a23b892fe6cc4859a30edc7ffc003ab7624aa5f0
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Wed Aug 29 18:28:39 2018 -0700
@@ -16828,6 +21262,22 @@ Date: Wed Aug 29 18:24:03 2018 -0700
util/hb-subset.cc | 3 +--
9 files changed, 52 insertions(+), 49 deletions(-)
+commit 9fd08cc238f8e2f7be1eaefca110021382efe606
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 29 18:18:18 2018 -0700
+
+ CFF2 subroutine flattner
+
+ Factored out CFF1 & CFF2 common subsetting code in
+ hb-subset-cff-common.hh
+
+ src/hb-cff2-interp-cs.hh | 34 +++++--
+ src/hb-subset-cff-common.hh | 154 +++++++++++++++++++++++++++++
+ src/hb-subset-cff1.cc | 135 +++-----------------------
+ src/hb-subset-cff2.cc | 229
+ ++++++++++++++++++--------------------------
+ 4 files changed, 285 insertions(+), 267 deletions(-)
+
commit d237ce71810045ee400c52740cd8ab6e1113aada
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Wed Aug 29 18:13:07 2018 -0700
@@ -16885,6 +21335,72 @@ Date: Wed Aug 29 22:37:39 2018 +0100
--------------------------------------------------------------
1 file changed, 157 deletions(-)
+commit b95bf075d7b62baf7d6fa1d8f0d1f16fad934975
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 29 14:41:52 2018 -0700
+
+ fix build attempt ^2
+
+ src/hb-subset-cff1.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit 1d1afddfd21155ef136c2d96b1d6c286bdc8925f
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 29 13:36:39 2018 -0700
+
+ corrected preprocessor guards
+
+ src/hb-cff-interp-common.hh | 6 +++---
+ src/hb-cff-interp-cs-common.hh | 6 +++---
+ src/hb-cff-interp-dict-common.hh | 6 +++---
+ src/hb-ot-cff-common.hh | 6 +++---
+ src/hb-subset-cff-common.hh | 6 +++---
+ 5 files changed, 15 insertions(+), 15 deletions(-)
+
+commit 8af9690ac7ce41fb1db878d556df5c4ee624eaa0
+Merge: 0ad081ec fee0f41c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 29 13:26:17 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+ Renamed cff "private" source/headers without the suffix
+
+commit 0ad081ec324e734cfca60d4d2c36a1be5bc8a067
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 29 12:56:48 2018 -0700
+
+ attempt to fix build failure
+
+ src/hb-subset-cff1.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit a11420b48c405e1a43e2ba62893e9a0872e5f496
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 29 12:14:30 2018 -0700
+
+ Subroutine flattener for CFF1
+
+ Subr-flattened charstrings are temporarily re-encoded in ByteStrBuff
+ during "plan" phase, then copied to hb_serialize_context_t during
+ "write" phase
+
+ CSOpSet may callback opcode processing "virtual" functions via CRTP
+
+ Numer struct may store a value as fixed optionally in addition to
+ int and float
+
+ src/hb-cff-interp-common-private.hh | 53 ++++++++++--
+ src/hb-cff-interp-cs-common-private.hh | 109 ++++++++++++++++++-----
+ src/hb-cff1-interp-cs.hh | 35 +++++---
+ src/hb-cff2-interp-cs.hh | 14 +--
+ src/hb-ot-cff-common-private.hh | 10 +--
+ src/hb-subset-cff-common-private.hh | 102 +++++++++++++++++++++-
+ src/hb-subset-cff1.cc | 152
+ ++++++++++++++++++++++-----------
+ src/hb-subset-cff2.cc | 7 +-
+ 8 files changed, 372 insertions(+), 110 deletions(-)
+
commit fee0f41c6c1e50621d10b07802ca36a9b295b53d
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Tue Aug 28 18:27:41 2018 -0700
@@ -17629,6 +22145,230 @@ Date: Wed Aug 15 20:12:25 2018 -0700
src/hb-ot-var.cc | 4 +-
10 files changed, 71 insertions(+), 91 deletions(-)
+commit 27c32d8afbdf5b587b14f3b194f79882680348ba
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 22 11:36:39 2018 -0700
+
+ fixed "Fixed" number decoding
+
+ src/hb-cff-interp-common-private.hh | 11 ++++++++++-
+ src/hb-cff-interp-cs-common-private.hh | 4 ++--
+ 2 files changed, 12 insertions(+), 3 deletions(-)
+
+commit 811a651bbd3f1bda7ed8eaee9af8e9dbbc8f80de
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Aug 20 14:04:46 2018 -0700
+
+ fixed bugs with empty CFFIndex, fullset FDMap
+
+ src/hb-ot-cff-common-private.hh | 21 ++++++++++++++++++---
+ 1 file changed, 18 insertions(+), 3 deletions(-)
+
+commit 5cde2f55cd2f8917954f3a3f60bd571c86b3aa59
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Aug 17 16:50:13 2018 -0700
+
+ drop hints from CFF & CFF2 Private
+
+ src/hb-cff-interp-dict-common-private.hh | 24 ++++++++++++++
+ src/hb-subset-cff1.cc | 53
+ +++++++++++++++++++++++++++---
+ src/hb-subset-cff2.cc | 55
+ +++++++++++++++++++++++++++++---
+ 3 files changed, 123 insertions(+), 9 deletions(-)
+
+commit cef75ea41a513a612a683bced27ced31761204b5
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Aug 17 13:13:18 2018 -0700
+
+ Added CFF2 Subr nullifier
+
+ along with CFF2 charstring interpreter
+ factored out common code between CFF1 & CFF2 to CSInterpreter
+ moved fetch_op from Interpreter to InterpEnv
+ misc code clean up & bug fixes
+
+ src/Makefile.sources | 1 +
+ src/hb-cff-interp-common-private.hh | 44 +++++++--------
+ src/hb-cff-interp-cs-common-private.hh | 95
+ +++++++++++++++++++++++++++++--
+ src/hb-cff-interp-dict-common-private.hh | 3 +-
+ src/hb-cff1-interp-cs.hh | 82 ---------------------------
+ src/hb-cff2-interp-cs.hh | 97
+ ++++++++++++++++++++++++++++++++
+ src/hb-ot-cff-common-private.hh | 4 ++
+ src/hb-ot-cff2-table.hh | 7 ++-
+ src/hb-subset-cff1.cc | 1 +
+ src/hb-subset-cff2.cc | 62 ++++++++++++++++++--
+ 10 files changed, 278 insertions(+), 118 deletions(-)
+
+commit f57d6bcbca276cec54d1e5308c308265e8e983b9
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Aug 16 08:03:46 2018 -0700
+
+ renamed CFF::Index to CFF::CFFIndex
+
+ to avoid confusion with OT::Index
+
+ src/hb-ot-cff-common-private.hh | 38
+ +++++++++++++++++++-------------------
+ src/hb-ot-cff1-table.hh | 4 ++--
+ src/hb-ot-cff2-table.hh | 2 +-
+ src/hb-subset-cff2.cc | 4 ++--
+ 4 files changed, 24 insertions(+), 24 deletions(-)
+
+commit c4ae426a3d3f9411b94d35745ca0e14677cd7bdb
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Aug 16 00:59:46 2018 -0700
+
+ treat h/vstem the same as h/vstemhm
+
+ src/hb-cff1-interp-cs.hh | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+commit e67bb3fbcf39385ea1db136aeca61291364fb75b
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Aug 16 00:25:57 2018 -0700
+
+ renamed OT::cff to OT::cff1 for consistency
+
+ along with HB_OT_TAG_cff1
+
+ src/hb-ot-cff1-table.hh | 14 +++++++-------
+ src/hb-subset-cff1.cc | 16 ++++++++--------
+ src/hb-subset.cc | 4 ++--
+ 3 files changed, 17 insertions(+), 17 deletions(-)
+
+commit fdbfa1848b2f279c0f7a885bc1a985fa3375cfcd
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Aug 16 00:13:09 2018 -0700
+
+ renamed CFF version 1 structs and sources to CFF1 from CFF
+
+ "CFF" is used for shared structs & sources between CFF1 & CFF2
+ except OT:cff is for CFF version 1 table
+
+ src/Makefile.sources | 8 +-
+ src/{hb-cff-interp-cs.hh => hb-cff1-interp-cs.hh} | 22 ++--
+ src/{hb-ot-cff-table.hh => hb-ot-cff1-table.hh} | 150
+ +++++++++++-----------
+ src/hb-ot-font.cc | 2 +-
+ src/{hb-subset-cff.cc => hb-subset-cff1.cc} | 86 ++++++-------
+ src/{hb-subset-cff.hh => hb-subset-cff1.hh} | 8 +-
+ src/hb-subset.cc | 2 +-
+ 7 files changed, 139 insertions(+), 139 deletions(-)
+
+commit 867f68bd8a74634ac6220bd76c8bafe3e2226041
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 15 15:53:50 2018 -0700
+
+ fix build attempt ^7
+
+ src/hb-subset-cff2.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 685db67bb07505729fdb997129ffd068bbe3c40d
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 15 15:45:17 2018 -0700
+
+ fix build attempt ^6
+
+ src/hb-subset-cff2.cc | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit 2810caafeb9a621d53653f454dab0fa3e7f5c4a3
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 15 15:30:24 2018 -0700
+
+ fix build attempt ^5
+
+ src/hb-subset-cff2.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 25b8310b2a3e074c9d1d723ab6d10a29f8d189be
+Merge: 7aa23f35 22defe09
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 15 15:00:55 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+commit 7aa23f3597e4783b88ad526021cc4cafc05395f2
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 15 15:00:32 2018 -0700
+
+ fix build attempt ^4
+
+ src/hb-cff-interp-cs.hh | 10 +++++-----
+ src/hb-subset-cff.cc | 2 +-
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+commit 270452a44653773b3dc584729ec438ff922e2739
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 15 13:15:08 2018 -0700
+
+ fix build attempt ^3
+
+ src/hb-cff-interp-common-private.hh | 2 --
+ src/hb-cff-interp-cs-common-private.hh | 1 +
+ src/hb-cff-interp-cs.hh | 1 +
+ src/hb-subset-cff.cc | 2 +-
+ 4 files changed, 3 insertions(+), 3 deletions(-)
+
+commit c234839f25e68700c3489c55fda2773f2e00eecb
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 15 13:04:43 2018 -0700
+
+ fix build attempt ^2
+
+ src/hb-cff-interp-common-private.hh | 2 ++
+ src/hb-cff-interp-cs-common-private.hh | 6 +++---
+ src/hb-cff-interp-cs.hh | 6 +++---
+ src/hb-cff-interp-dict-common-private.hh | 6 +++---
+ src/hb-subset-cff.cc | 6 +++---
+ 5 files changed, 14 insertions(+), 12 deletions(-)
+
+commit eab07e713a67da2c5b368c59808f7e2db1cf0b0b
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 15 12:15:55 2018 -0700
+
+ fix build
+
+ src/Makefile.sources | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 633ce88de93f5c565ee7fb8acdbd93c57779524b
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 15 12:00:19 2018 -0700
+
+ CFF Subrs subsetting
+
+ Unreferenced subroutines are nullified (not removed) in a subset font
+
+ Separate Interpreter struct from hb-ot-cff-common-private.hh in a
+ set of four header files, augmented for CharString (CS):
+ hb-cff-interp-common-private.hh
+ hb-cff-interp-dict-common-private.hh
+ hb-cff-interp-cs-common-private.hh
+ hb-cff-interp-cs.hh
+
+ Interpreter runtime is separated off as a new struct InterpEnv
+ sub-classed differently for Dict and CharString (CS)
+
+ src/Makefile.sources | 8 +-
+ src/hb-cff-interp-common-private.hh | 581
+ +++++++++++++++++++++++++++++++
+ src/hb-cff-interp-cs-common-private.hh | 174 +++++++++
+ src/hb-cff-interp-cs.hh | 282 +++++++++++++++
+ src/hb-cff-interp-dict-common-private.hh | 183 ++++++++++
+ src/hb-ot-cff-common-private.hh | 562
+ ++----------------------------
+ src/hb-ot-cff-table.hh | 165 ++++-----
+ src/hb-ot-cff2-table.hh | 147 ++++----
+ src/hb-subset-cff-common-private.hh | 83 +++++
+ src/hb-subset-cff.cc | 118 +++++--
+ src/hb-subset-cff2.cc | 38 +-
+ 11 files changed, 1585 insertions(+), 756 deletions(-)
+
commit 22defe0965adddaa09eebc13df7fa6c64e2abba3
Author: Emil A Eklund <eae@chromium.org>
Date: Tue Aug 14 14:47:20 2018 -0700
@@ -17953,6 +22693,64 @@ Date: Thu Aug 9 15:16:32 2018 +0700
src/hb-common.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
+commit a3a8c85b027779365bb33e2063221b4650fbac3b
+Merge: 145f371d 652cd45c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Aug 10 13:41:42 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+commit 145f371d71965b86635025c73117db0e24f2df75
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Aug 10 13:07:53 2018 -0700
+
+ fixed TRACE build failure
+
+ src/hb-ot-cff-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a97ed342d18bdb262400c8ab6501df110fe4e18f
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Aug 10 12:55:22 2018 -0700
+
+ fixed inclusion of excluded Private & local Subrs
+
+ It was bloating a multi-FD subset font unnecessarily
+ defined a wrapper struct FDMap for fdmap
+
+ src/hb-ot-cff-common-private.hh | 34 ++++++++++++++++++++-----
+ src/hb-subset-cff-common-private.cc | 6 ++---
+ src/hb-subset-cff-common-private.hh | 4 +--
+ src/hb-subset-cff.cc | 48
+ +++++++++++++++++++----------------
+ src/hb-subset-cff2.cc | 50
+ ++++++++++++++++++++-----------------
+ 5 files changed, 87 insertions(+), 55 deletions(-)
+
+commit 64c541226457907ec1801a5766050ee64feb67e8
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Aug 10 11:07:07 2018 -0700
+
+ Added CFF support
+
+ Added sources hb-ot-cff-table.hh, hb-subset-cff.cc & hh
+ Templatized Index because CFF uses 16-bit count while CFF2 uses 32-bit
+ Misc code cleanup & bug fixes
+
+ src/Makefile.sources | 9 +-
+ src/hb-ot-cff-common-private.hh | 477 ++++++++++++-------
+ src/hb-ot-cff-table.hh | 919
+ ++++++++++++++++++++++++++++++++++++
+ src/hb-ot-cff2-table.hh | 235 ++++-----
+ src/hb-ot-font.cc | 1 +
+ src/hb-subset-cff-common-private.cc | 6 +-
+ src/hb-subset-cff-common-private.hh | 4 +-
+ src/hb-subset-cff.cc | 560 ++++++++++++++++++++++
+ src/hb-subset-cff.hh | 38 ++
+ src/hb-subset-cff2.cc | 104 ++--
+ src/hb-subset.cc | 4 +
+ 11 files changed, 1991 insertions(+), 366 deletions(-)
+
commit 652cd45c650b1cdce2585dcee614e5a9cdda530c
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Aug 9 01:02:02 2018 -0700
@@ -18205,6 +23003,53 @@ Date: Mon Aug 6 15:32:13 2018 -0700
src/hb-iter-private.hh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
+commit 161ece4c3097096f355dc5ea514320a8dc678bea
+Merge: e8d695eb 79e21984
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Aug 6 11:23:50 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+commit e8d695ebaa4b5d36d907042fb6930244e87b1e29
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Aug 6 11:13:06 2018 -0700
+
+ removed CMakeCache.txt
+
+ build/CMakeCache.txt | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 9fae33b9f3fd7fce816c3db71089db4ce0c82d4c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Aug 6 10:44:12 2018 -0700
+
+ Silence Codacy
+
+ build/CMakeCache.txt | 1 +
+ src/hb-subset-cff-common-private.cc | 8 +++++---
+ src/hb-subset-cff2.cc | 4 +++-
+ 3 files changed, 9 insertions(+), 4 deletions(-)
+
+commit 5561b818498431adb52f958d1e9589620f0e6539
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Aug 6 10:04:53 2018 -0700
+
+ subset FDSelect and FDArray
+
+ Added a set of sources hb-subset-cff-common-private.cc & .hh for
+ FDSelect subseting code.
+ Added FDSelect format 4 (CFF2 only) support. Shared its implementation
+ with format 3 as a template.
+
+ src/Makefile.sources | 2 +
+ src/hb-ot-cff-common-private.hh | 130 ++++++++++++++++-------
+ src/hb-ot-cff2-table.hh | 71 ++++++++++++-
+ src/hb-subset-cff-common-private.cc | 200
+ ++++++++++++++++++++++++++++++++++++
+ src/hb-subset-cff-common-private.hh | 54 ++++++++++
+ src/hb-subset-cff2.cc | 71 ++++++++++---
+ 6 files changed, 476 insertions(+), 52 deletions(-)
+
commit 79e21984b13bdb879f3007ba9a97fde47df340d3
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Mon Aug 6 09:45:17 2018 -0700
@@ -18498,6 +23343,34 @@ Date: Fri Aug 3 16:22:16 2018 -0700
src/hb-ot-var.cc | 4 ++--
7 files changed, 27 insertions(+), 26 deletions(-)
+commit cc3f4e00aa5da1d9f0430adefe30689b3daa8282
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Aug 3 15:00:37 2018 -0700
+
+ silence gcc
+
+ src/hb-ot-cff2-table.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 00970dd2420c3dcc58c25568be4abe6586c159df
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Fri Aug 3 14:35:09 2018 -0700
+
+ Removed parsed hint fields from CFF2PrivateDictValues
+
+ Instead moved & stored uniformly in values vector (renamed from
+ opstrs)
+ This should be fine as we aren't likely going to use them as hints
+ after all
+ Templatized DictValues whether to parse them out
+ For subsetter, they aren't parsed
+
+ src/hb-ot-cff-common-private.hh | 113 ++++++++++++++----------
+ src/hb-ot-cff2-table.hh | 185
+ ++++++++++++----------------------------
+ src/hb-subset-cff2.cc | 2 +-
+ 3 files changed, 120 insertions(+), 180 deletions(-)
+
commit 6a0a298aabe777e2c1ed443f100fe6142c83e3b3
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Aug 2 23:13:19 2018 -0700
@@ -18541,6 +23414,66 @@ Date: Thu Aug 2 20:04:37 2018 -0700
src/hb-ot-font.cc | 41 ++++++++++++++++++++++++++---------------
1 file changed, 26 insertions(+), 15 deletions(-)
+commit 76f7397c10832b891a082e30afc74222bd5ffd7b
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Aug 2 16:28:10 2018 -0700
+
+ templatized CFF2 accelerator for lean Private dict interpretting
+ for subset
+
+ also fixed local subrs serialization
+
+ src/hb-ot-cff-common-private.hh | 8 ++-
+ src/hb-ot-cff2-table.hh | 119
+ ++++++++++++++++++++++++++++++++--------
+ src/hb-subset-cff2.cc | 13 +++--
+ 3 files changed, 109 insertions(+), 31 deletions(-)
+
+commit 43040564e661fdd616d39e84fde07612d55bb785
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Aug 2 12:23:10 2018 -0700
+
+ removed TRACE_SERIALIZE from non-member function _write_cff2
+
+ src/hb-subset-cff2.cc | 29 ++++++++++++++---------------
+ 1 file changed, 14 insertions(+), 15 deletions(-)
+
+commit e2fd49e4779663e3138bd1990736a9cf850303bf
+Merge: 693ae804 d4d1bf81
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Aug 2 11:39:22 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
+commit 693ae804743c60968d4339465fa6480e0ed8396c
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Aug 2 11:22:42 2018 -0700
+
+ more silencing fixes
+
+ src/hb-ot-cff2-table.hh | 2 +-
+ src/hb-subset-cff2.cc | 1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+commit f6da44983178e345ddbac1bcd1691ddb330399c6
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Aug 2 10:52:08 2018 -0700
+
+ silence archlinux
+
+ src/hb-ot-cff-common-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 58279c3db4f31bf3f9a509d1d88bca01b57c6b81
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Thu Aug 2 10:18:01 2018 -0700
+
+ silence Codacy
+
+ src/hb-ot-cff-common-private.hh | 25 +++++++++++++++++++------
+ src/hb-ot-cff2-table.hh | 14 +++++++-------
+ 2 files changed, 26 insertions(+), 13 deletions(-)
+
commit 574b37e933f98e35c2bdae04458a95522bbfbb82
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Aug 2 02:22:38 2018 -0700
@@ -18695,6 +23628,38 @@ Date: Wed Aug 1 17:53:30 2018 -0700
src/hb-shaper-private.hh | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
+commit 19ce0b24c0173fed11104a8ab039e856cbf40924
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 1 17:34:59 2018 -0700
+
+ removed unused field OpStr::update
+
+ src/hb-ot-cff-common-private.hh | 4 +---
+ src/hb-ot-cff2-table.hh | 22 +++++++++++-----------
+ 2 files changed, 12 insertions(+), 14 deletions(-)
+
+commit 3bda54c43b248ee2bc18a9210fb4d880bb4d82ac
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 1 16:32:27 2018 -0700
+
+ fixed Index::serialize
+
+ The bug was causing CharString of the last glyph corrupt
+
+ src/hb-ot-cff-common-private.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 16f4dc9b73a197a5ab0ad29dcf5a7ed7495ec4e1
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 1 16:06:52 2018 -0700
+
+ fixed CFF2VariationStore::serialize
+
+ also get_size
+
+ src/hb-ot-cff2-table.hh | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
commit 44d1fb37efa20852cc466c0f0bba95dbd24ce288
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Wed Aug 1 14:51:51 2018 -0700
@@ -18762,6 +23727,24 @@ Date: Thu Aug 2 00:11:43 2018 +0430
appveyor.yml | 1 +
1 file changed, 1 insertion(+)
+commit b2ff582c8c1a0fea60ee323dc820ce6fe807b063
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Aug 1 11:30:38 2018 -0700
+
+ Implemented hb_subset_cff2
+
+ Added serialize functions to CFF2 structs
+ Fixed issues & bugs & code cleanup
+ Now subsetting CFF2 table outputs something
+
+ src/hb-ot-cff-common-private.hh | 428
+ +++++++++++++++++++++++++++++++++++-----
+ src/hb-ot-cff2-table.hh | 237 +++++++++++++++++-----
+ src/hb-private.hh | 2 +-
+ src/hb-subset-cff2.cc | 392
+ +++++++++++++++++++++++++++++++-----
+ 4 files changed, 914 insertions(+), 145 deletions(-)
+
commit 1a7fed631880fff8a947ebec9c7427efff581916
Author: Ebrahim Byagowi <ebrahim@gnu.org>
Date: Wed Aug 1 12:15:44 2018 +0430
@@ -19517,6 +24500,37 @@ Date: Mon Jul 30 16:59:41 2018 -0700
src/hb-machinery-private.hh | 6 ------
1 file changed, 6 deletions(-)
+commit 8782f80cce147c101b605501d9fd9c7d64338314
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Jul 30 15:27:20 2018 -0700
+
+ fixed FDSelect0::sanitize
+
+ src/hb-ot-cff-common-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 9c4cadaef01733b32ab6190dd91552ee7145f3c3
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Jul 30 14:28:40 2018 -0700
+
+ Added sanitize functions & calls
+
+ Added sanitize functions to FDSelect
+ Added satnitize calls for FDSelect, VariationStore, FDArray, TopDict
+
+ src/hb-ot-cff-common-private.hh | 67
+ ++++++++++++++++++++++++++++++++---------
+ src/hb-ot-cff2-table.hh | 26 +++++++++++-----
+ src/hb-subset-cff2.cc | 2 +-
+ 3 files changed, 72 insertions(+), 23 deletions(-)
+
+commit 161b642ec5babc7e4b81d41f725d81ad2caa9330
+Merge: 3a61c3e9 5edf454a
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Mon Jul 30 12:22:09 2018 -0700
+
+ Merge branch 'master' into cff-subset
+
commit 5edf454aa64aad461c90bd991e7eaf27668b7e6b
Author: Garret Rieger <grieger@google.com>
Date: Thu Jul 26 17:42:02 2018 -0700
@@ -19863,6 +24877,25 @@ Date: Sat Jul 21 21:14:48 2018 +0430
src/hb-ot-layout.h | 8 ++++
4 files changed, 109 insertions(+)
+commit 3a61c3e935cf649ba65ef0cb4daa9f06ab5d3c0a
+Author: Michiharu Ariza <ariza@adobe.com>
+Date: Wed Jul 18 14:17:52 2018 -0700
+
+ first push of CFF/CFF2 work
+
+ Index, Dict structs
+ hooked up to hb-subset (takes CFF2, outputs empty CFF2)
+
+ src/Makefile.sources | 4 +
+ src/hb-ot-cff-common-private.hh | 475
+ ++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-cff2-table.hh | 386 ++++++++++++++++++++++++++++++++
+ src/hb-ot-font.cc | 2 +
+ src/hb-subset-cff2.cc | 121 ++++++++++
+ src/hb-subset-cff2.hh | 38 ++++
+ src/hb-subset.cc | 4 +
+ 7 files changed, 1030 insertions(+)
+
commit 93b65d9fe331a217640069fad4159cb7c3ec35e6
Author: Ebrahim Byagowi <ebrahim@gnu.org>
Date: Tue Jul 17 23:29:16 2018 +0430
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/NEWS b/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
index ff4f6e29df2..890c258d83c 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 2.3.0
+Thursday, December 20, 2018
+====================================
+- Fix regression on big-endian architectures. Ouch!
+- Misc bug and build fixes.
+- Fix subsetting of simple GSUB/GDEF.
+- Merge CFF / CFF2 support contributed by Adobe. This mostly involves
+ the subsetter, but also get_glyph_extents on CFF fonts.
+
+New API in hb-aat.h:
++hb_aat_layout_has_substitution()
++hb_aat_layout_has_positioning()
++hb_aat_layout_has_tracking()
+
+
Overview of changes leading to 2.2.0
Thursday, November 29, 2018
====================================
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in b/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in
index 029518d7c83..7faa9fdd3a6 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in
@@ -182,28 +182,6 @@
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
-/* Enable extensions on AIX 3, Interix. */
-#ifndef _ALL_SOURCE
-# undef _ALL_SOURCE
-#endif
-/* Enable GNU extensions on systems that have them. */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif
-/* Enable threading extensions on Solaris. */
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# undef _POSIX_PTHREAD_SEMANTICS
-#endif
-/* Enable extensions on HP NonStop. */
-#ifndef _TANDEM_SOURCE
-# undef _TANDEM_SOURCE
-#endif
-/* Enable general extensions on Solaris. */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
-#endif
-
-
/* Enable large inode numbers on Mac OS X 10.5. */
#ifndef _DARWIN_USE_64_BIT_INODE
# define _DARWIN_USE_64_BIT_INODE 1
@@ -214,13 +192,3 @@
/* Define for large files, on AIX-style hosts. */
#undef _LARGE_FILES
-
-/* Define to 1 if on MINIX. */
-#undef _MINIX
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
- this defined. */
-#undef _POSIX_1_SOURCE
-
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-#undef _POSIX_SOURCE
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac b/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
index 0649464386d..03155372bfb 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],
- [2.2.0],
+ [2.3.0],
[https://github.com/harfbuzz/harfbuzz/issues/new],
[harfbuzz],
[http://harfbuzz.org/])
@@ -12,7 +12,6 @@ AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([1.13.0 gnits tar-ustar dist-bzip2 no-dist-gzip -Wall no-define color-tests -Wno-portability])
AM_SILENT_RULES([yes])
AX_CODE_COVERAGE
-AC_USE_SYSTEM_EXTENSIONS
# Initialize libtool
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/gtk-doc.make b/Build/source/libs/harfbuzz/harfbuzz-src/gtk-doc.make
index e4a12a5b255..2454c285797 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/gtk-doc.make
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/gtk-doc.make
@@ -196,6 +196,7 @@ html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_con
if test -f $(abs_builddir)/$$file ; then \
cp $(abs_builddir)/$$file $(abs_builddir)/html; \
fi; \
+ test -f $$file && cp $$file $(abs_builddir)/html; \
done;
$(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
$(AM_V_at)touch html-build.stamp
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am b/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am
index c726cf2a660..3618d03a2c7 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am
@@ -28,10 +28,6 @@ HBSOURCES = $(HB_BASE_sources)
HBSOURCES += $(HB_BASE_RAGEL_GENERATED_sources)
HBHEADERS = $(HB_BASE_headers)
-HBSOURCES += $(HB_OT_sources)
-HBSOURCES += $(HB_OT_RAGEL_GENERATED_sources)
-HBHEADERS += $(HB_OT_headers)
-
if HAVE_FALLBACK
HBSOURCES += $(HB_FALLBACK_sources)
endif
@@ -299,12 +295,10 @@ built-sources: $(BUILT_SOURCES)
RAGEL_GENERATED = \
$(patsubst %,$(srcdir)/%,$(HB_BASE_RAGEL_GENERATED_sources)) \
- $(patsubst %,$(srcdir)/%,$(HB_OT_RAGEL_GENERATED_sources)) \
$(NULL)
BUILT_SOURCES += $(RAGEL_GENERATED)
EXTRA_DIST += \
$(HB_BASE_RAGEL_sources) \
- $(HB_OT_RAGEL_sources) \
$(NULL)
# We decided to add ragel-generated files to git...
#MAINTAINERCLEANFILES += $(RAGEL_GENERATED)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources b/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources
index ba90ef022ef..98b62288978 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources
@@ -1,196 +1,198 @@
# Base and default-included sources and headers
HB_BASE_sources = \
+ hb-aat-fdsc-table.hh \
+ hb-aat-layout-ankr-table.hh \
+ hb-aat-layout-bsln-table.hh \
+ hb-aat-layout-common.hh \
+ hb-aat-layout-feat-table.hh \
+ hb-aat-layout-just-table.hh \
+ hb-aat-layout-kerx-table.hh \
+ hb-aat-layout-lcar-table.hh \
+ hb-aat-layout-morx-table.hh \
+ hb-aat-layout-trak-table.hh \
+ hb-aat-layout.cc \
+ hb-aat-layout.hh \
+ hb-aat-ltag-table.hh \
+ hb-aat-map.cc \
+ hb-aat-map.hh \
+ hb-array.hh \
hb-atomic.hh \
- hb-blob.hh \
hb-blob.cc \
- hb-buffer.hh \
+ hb-blob.hh \
hb-buffer-serialize.cc \
hb-buffer.cc \
+ hb-buffer.hh \
hb-cache.hh \
+ hb-cff-interp-common.hh \
+ hb-cff-interp-cs-common.hh \
+ hb-cff-interp-dict-common.hh \
+ hb-cff1-interp-cs.hh \
+ hb-cff2-interp-cs.hh \
hb-common.cc \
hb-debug.hh \
hb-dsalgs.hh \
- hb-face.hh \
hb-face.cc \
- hb-font.hh \
+ hb-face.hh \
hb-font.cc \
- hb-iter.hh \
+ hb-font.hh \
hb-kern.hh \
- hb-map.hh \
- hb-map.cc \
hb-machinery.hh \
+ hb-map.cc \
+ hb-map.hh \
hb-mutex.hh \
hb-null.hh \
hb-object.hh \
hb-open-file.hh \
hb-open-type.hh \
- hb-ot-color-cbdt-table.hh \
+ hb-ot-cff-common.hh \
+ hb-ot-cff1-table.cc \
+ hb-ot-cff1-table.hh \
+ hb-ot-cff2-table.cc \
+ hb-ot-cff2-table.hh \
hb-ot-cmap-table.hh \
+ hb-ot-color-cbdt-table.hh \
+ hb-ot-color-colr-table.hh \
+ hb-ot-color-cpal-table.hh \
+ hb-ot-color-sbix-table.hh \
+ hb-ot-color-svg-table.hh \
+ hb-ot-color.cc \
+ hb-ot-face.cc \
+ hb-ot-face.hh \
+ hb-ot-font.cc \
+ hb-ot-gasp-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 \
hb-ot-kern-table.hh \
- hb-ot-maxp-table.hh \
- hb-ot-name-language.cc \
- hb-ot-name-language.hh \
- hb-ot-name-table.hh \
- hb-ot-name.cc \
- hb-ot-os2-table.hh \
- hb-ot-os2-unicode-ranges.hh \
- hb-ot-post-macroman.hh \
- hb-ot-post-table.hh \
- hb-ot-tag-table.hh \
- hb-ot-tag.cc \
- hb.hh \
- hb-set-digest.hh \
- hb-set.hh \
- hb-set.cc \
- hb-shape.cc \
- hb-shape-plan.hh \
- hb-shape-plan.cc \
- hb-shaper-list.hh \
- hb-shaper-impl.hh \
- hb-shaper.hh \
- hb-shaper.cc \
- hb-static.cc \
- hb-string-array.hh \
- hb-unicode.hh \
- hb-unicode-emoji-table.hh \
- hb-unicode.cc \
- hb-vector.hh \
- hb-utf.hh \
- hb-warning.cc \
- $(NULL)
-
-HB_BASE_RAGEL_GENERATED_sources = \
- hb-buffer-deserialize-json.hh \
- hb-buffer-deserialize-text.hh \
- $(NULL)
-HB_BASE_RAGEL_sources = \
- hb-buffer-deserialize-json.rl \
- hb-buffer-deserialize-text.rl \
- $(NULL)
-
-HB_BASE_headers = \
- hb.h \
- hb-blob.h \
- hb-buffer.h \
- hb-common.h \
- hb-deprecated.h \
- hb-face.h \
- hb-font.h \
- hb-map.h \
- hb-set.h \
- hb-shape.h \
- hb-shape-plan.h \
- hb-unicode.h \
- hb-version.h \
- $(NULL)
-
-HB_FALLBACK_sources = \
- hb-fallback-shape.cc \
- $(NULL)
-
-HB_OT_sources = \
- hb-aat-layout.cc \
- hb-aat-layout-common.hh \
- hb-aat-layout-ankr-table.hh \
- hb-aat-layout-bsln-table.hh \
- hb-aat-layout-feat-table.hh \
- hb-aat-layout-just-table.hh \
- hb-aat-layout-kerx-table.hh \
- hb-aat-layout-lcar-table.hh \
- hb-aat-layout-morx-table.hh \
- hb-aat-layout-trak-table.hh \
- hb-aat-layout.hh \
- hb-aat-ltag-table.hh \
- hb-aat-map.cc \
- hb-aat-map.hh \
- hb-ot-face.hh \
- hb-ot-face.cc \
- hb-ot-font.cc \
- hb-ot-layout.cc \
hb-ot-layout-base-table.hh \
hb-ot-layout-common.hh \
hb-ot-layout-gdef-table.hh \
hb-ot-layout-gpos-table.hh \
- hb-ot-layout-gsubgpos.hh \
hb-ot-layout-gsub-table.hh \
+ hb-ot-layout-gsubgpos.hh \
hb-ot-layout-jstf-table.hh \
+ hb-ot-layout.cc \
hb-ot-layout.hh \
- hb-ot-color.cc \
- hb-ot-color-colr-table.hh \
- hb-ot-color-cpal-table.hh \
- hb-ot-color-sbix-table.hh \
- hb-ot-color-svg-table.hh \
hb-ot-map.cc \
hb-ot-map.hh \
- hb-ot-math.cc \
hb-ot-math-table.hh \
- hb-ot-shape.cc \
- hb-ot-shape-complex-arabic.cc \
+ hb-ot-math.cc \
+ hb-ot-maxp-table.hh \
+ hb-ot-name-language.cc \
+ hb-ot-name-language.hh \
+ hb-ot-name-table.hh \
+ hb-ot-name.cc \
+ hb-ot-os2-table.hh \
+ hb-ot-os2-unicode-ranges.hh \
+ hb-ot-post-macroman.hh \
+ hb-ot-post-table.hh \
hb-ot-shape-complex-arabic-fallback.hh \
- hb-ot-shape-complex-arabic.hh \
hb-ot-shape-complex-arabic-table.hh \
hb-ot-shape-complex-arabic-win1256.hh \
+ hb-ot-shape-complex-arabic.cc \
+ hb-ot-shape-complex-arabic.hh \
hb-ot-shape-complex-default.cc \
hb-ot-shape-complex-hangul.cc \
hb-ot-shape-complex-hebrew.cc \
+ hb-ot-shape-complex-indic-table.cc \
hb-ot-shape-complex-indic.cc \
hb-ot-shape-complex-indic.hh \
- hb-ot-shape-complex-indic-table.cc \
- hb-ot-shape-complex-khmer.hh \
hb-ot-shape-complex-khmer.cc \
- hb-ot-shape-complex-myanmar.hh \
+ hb-ot-shape-complex-khmer.hh \
hb-ot-shape-complex-myanmar.cc \
+ hb-ot-shape-complex-myanmar.hh \
hb-ot-shape-complex-thai.cc \
+ hb-ot-shape-complex-use-table.cc \
hb-ot-shape-complex-use.cc \
hb-ot-shape-complex-use.hh \
- hb-ot-shape-complex-use-table.cc \
hb-ot-shape-complex-vowel-constraints.cc \
hb-ot-shape-complex-vowel-constraints.hh \
hb-ot-shape-complex.hh \
- hb-ot-shape-normalize.hh \
- hb-ot-shape-normalize.cc \
- hb-ot-shape-fallback.hh \
hb-ot-shape-fallback.cc \
+ hb-ot-shape-fallback.hh \
+ hb-ot-shape-normalize.cc \
+ hb-ot-shape-normalize.hh \
+ hb-ot-shape.cc \
hb-ot-shape.hh \
hb-ot-stat-table.hh \
- hb-ot-var.cc \
+ hb-ot-tag-table.hh \
+ hb-ot-tag.cc \
hb-ot-var-avar-table.hh \
hb-ot-var-fvar-table.hh \
hb-ot-var-hvar-table.hh \
hb-ot-var-mvar-table.hh \
+ hb-ot-var.cc \
hb-ot-vorg-table.hh \
+ hb-set-digest.hh \
+ hb-set.cc \
+ hb-set.hh \
+ hb-shape-plan.cc \
+ hb-shape-plan.hh \
+ hb-shape.cc \
+ hb-shaper-impl.hh \
+ hb-shaper-list.hh \
+ hb-shaper.cc \
+ hb-shaper.hh \
+ hb-static.cc \
+ hb-string-array.hh \
+ hb-unicode-emoji-table.hh \
+ hb-unicode.cc \
+ hb-unicode.hh \
+ hb-utf.hh \
+ hb-vector.hh \
+ hb-warning.cc \
+ hb.hh \
$(NULL)
-HB_OT_RAGEL_GENERATED_sources = \
+HB_BASE_RAGEL_GENERATED_sources = \
+ hb-buffer-deserialize-json.hh \
+ hb-buffer-deserialize-text.hh \
hb-ot-shape-complex-indic-machine.hh \
hb-ot-shape-complex-khmer-machine.hh \
hb-ot-shape-complex-myanmar-machine.hh \
hb-ot-shape-complex-use-machine.hh \
$(NULL)
-HB_OT_RAGEL_sources = \
+HB_BASE_RAGEL_sources = \
+ hb-buffer-deserialize-json.rl \
+ hb-buffer-deserialize-text.rl \
hb-ot-shape-complex-indic-machine.rl \
hb-ot-shape-complex-khmer-machine.rl \
hb-ot-shape-complex-myanmar-machine.rl \
hb-ot-shape-complex-use-machine.rl \
$(NULL)
-HB_OT_headers = \
- hb-aat.h \
+HB_BASE_headers = \
hb-aat-layout.h \
- hb-ot.h \
+ hb-aat.h \
+ hb-blob.h \
+ hb-buffer.h \
+ hb-common.h \
+ hb-deprecated.h \
+ hb-face.h \
+ hb-font.h \
+ hb-map.h \
hb-ot-color.h \
+ hb-ot-deprecated.h \
hb-ot-font.h \
hb-ot-layout.h \
hb-ot-math.h \
hb-ot-name.h \
hb-ot-shape.h \
hb-ot-var.h \
+ hb-ot.h \
+ hb-set.h \
+ hb-shape-plan.h \
+ hb-shape.h \
+ hb-unicode.h \
+ hb-version.h \
+ hb.h \
+ $(NULL)
+
+HB_FALLBACK_sources = \
+ hb-fallback-shape.cc \
$(NULL)
# Optional Sources and Headers with external deps
@@ -224,15 +226,26 @@ HB_ICU_headers = hb-icu.h
# Sources for libharfbuzz-subset
HB_SUBSET_sources = \
+ hb-ot-cff1-table.cc \
+ hb-ot-cff2-table.cc \
hb-static.cc \
- hb-subset.cc \
- hb-subset.hh \
+ hb-subset-cff-common.cc \
+ hb-subset-cff-common.hh \
+ hb-subset-cff1.cc \
+ hb-subset-cff1.hh \
+ hb-subset-cff2.cc \
+ hb-subset-cff2.hh \
hb-subset-glyf.cc \
hb-subset-glyf.hh \
+ hb-subset-glyf.hh \
hb-subset-input.cc \
hb-subset-input.hh \
hb-subset-plan.cc \
hb-subset-plan.hh \
+ hb-subset-plan.hh \
+ hb-subset.cc \
+ hb-subset.hh \
+ hb-subset.hh \
$(NULL)
HB_SUBSET_headers = \
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
index a506889810b..8ddc9d5a4ef 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-indic-data.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-indic-data.cc
@@ -27,7 +27,7 @@
#include "hb-ot-shape-complex-indic.hh"
int
-main (void)
+main ()
{
for (hb_codepoint_t u = 0; u <= 0x10FFFF; u++)
{
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
index 1e79a976732..cffbb92df72 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-khmer-data.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-khmer-data.cc
@@ -27,7 +27,7 @@
#include "hb-ot-shape-complex-khmer.hh"
int
-main (void)
+main ()
{
for (hb_codepoint_t u = 0; u <= 0x10FFFF; u++)
{
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
index 9f8b12ed229..c1a303f8f1a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-myanmar-data.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-myanmar-data.cc
@@ -27,7 +27,7 @@
#include "hb-ot-shape-complex-myanmar.hh"
int
-main (void)
+main ()
{
for (hb_codepoint_t u = 0; u <= 0x10FFFF; u++)
{
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
index 4a8b25842e1..d639426b733 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-use-data.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-use-data.cc
@@ -27,7 +27,7 @@
#include "hb-ot-shape-complex-use.hh"
int
-main (void)
+main ()
{
for (hb_codepoint_t u = 0; u <= 0x10FFFF; u++)
{
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-fdsc-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-fdsc-table.hh
new file mode 100644
index 00000000000..a1af595f9ff
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-fdsc-table.hh
@@ -0,0 +1,126 @@
+/*
+ * 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_FDSC_TABLE_HH
+#define HB_AAT_FDSC_TABLE_HH
+
+#include "hb-aat-layout-common.hh"
+#include "hb-open-type.hh"
+
+/*
+ * fdsc -- Font descriptors
+ * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6fdsc.html
+ */
+#define HB_AAT_TAG_fdsc HB_TAG('f','d','s','c')
+
+
+namespace AAT {
+
+
+struct FontDescriptor
+{
+ bool has_data () const { return tag; }
+
+ int cmp (hb_tag_t a) const { return tag.cmp (a); }
+
+ float get_value () const { return u.value.to_float (); }
+
+ enum non_alphabetic_value_t {
+ Alphabetic = 0,
+ Dingbats = 1,
+ PiCharacters = 2,
+ Fleurons = 3,
+ DecorativeBorders = 4,
+ InternationalSymbols= 5,
+ MathSymbols = 6
+ };
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ protected:
+ Tag tag; /* The 4-byte table tag name. */
+ union {
+ Fixed value; /* The value for the descriptor tag. */
+ HBUINT32 nalfType; /* If the tag is `nalf`, see non_alphabetic_value_t */
+ } u;
+ public:
+ DEFINE_SIZE_STATIC (8);
+};
+
+struct fdsc
+{
+ enum { tableTag = HB_AAT_TAG_fdsc };
+
+ enum {
+ Weight = HB_TAG ('w','g','h','t'),
+ /* Percent weight relative to regular weight.
+ * (defaul value: 1.0) */
+ Width = HB_TAG ('w','d','t','h'),
+ /* Percent width relative to regular width.
+ * (default value: 1.0) */
+ Slant = HB_TAG ('s','l','n','t'),
+ /* Angle of slant in degrees, where positive
+ * is clockwise from straight up.
+ * (default value: 0.0) */
+ OpticalSize = HB_TAG ('o','p','s','z'),
+ /* Point size the font was designed for.
+ * (default value: 12.0) */
+ NonAlphabetic= HB_TAG ('n','a','l','f')
+ /* These values are treated as integers,
+ * not fixed32s. 0 means alphabetic, and greater
+ * integers mean the font is non-alphabetic (e.g. symbols).
+ * (default value: 0) */
+ };
+
+ const FontDescriptor &get_descriptor (hb_tag_t style) const
+ { return descriptors.lsearch (style); }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ descriptors.sanitize (c));
+ }
+
+ protected:
+ Fixed version; /* Version number of the font descriptors
+ * table (0x00010000 for the current version). */
+ LArrayOf<FontDescriptor>
+ descriptors; /* List of tagged-coordinate pairs style descriptors
+ * that will be included to characterize this font.
+ * Each descriptor consists of a <tag, value> pair.
+ * These pairs are located in the gxFontDescriptor
+ * array that follows. */
+ public:
+ DEFINE_SIZE_ARRAY (8, descriptors);
+};
+
+} /* namespace AAT */
+
+
+#endif /* HB_AAT_FDSC_TABLE_HH */
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
index b793245a0c5..4235b363a1f 100644
--- 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
@@ -41,7 +41,7 @@ using namespace OT;
struct Anchor
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -58,12 +58,12 @@ typedef LArrayOf<Anchor> GlyphAnchors;
struct ankr
{
- static const hb_tag_t tableTag = HB_AAT_TAG_ankr;
+ enum { tableTag = HB_AAT_TAG_ankr };
- inline const Anchor &get_anchor (hb_codepoint_t glyph_id,
- unsigned int i,
- unsigned int num_glyphs,
- const char *end) const
+ const Anchor &get_anchor (hb_codepoint_t glyph_id,
+ unsigned int i,
+ unsigned int num_glyphs,
+ const char *end) const
{
const Offset<HBUINT16, false> *offset = (this+lookupTable).get_value (glyph_id, num_glyphs);
if (!offset)
@@ -75,7 +75,7 @@ struct ankr
return anchors[i];
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-bsln-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-bsln-table.hh
index b86408626f2..5bc59cbb10a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-bsln-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-bsln-table.hh
@@ -39,7 +39,7 @@ namespace AAT {
struct BaselineTableFormat0Part
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -57,7 +57,7 @@ struct BaselineTableFormat0Part
struct BaselineTableFormat1Part
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -75,7 +75,7 @@ struct BaselineTableFormat1Part
struct BaselineTableFormat2Part
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -98,7 +98,7 @@ struct BaselineTableFormat2Part
struct BaselineTableFormat3Part
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && lookupTable.sanitize (c));
@@ -116,15 +116,16 @@ struct BaselineTableFormat3Part
struct bsln
{
- static const hb_tag_t tableTag = HB_AAT_TAG_bsln;
+ enum { tableTag = HB_AAT_TAG_bsln };
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!(c->check_struct (this) && defaultBaseline < 32)))
return_trace (false);
- switch (format) {
+ switch (format)
+ {
case 0: return_trace (parts.format0.sanitize (c));
case 1: return_trace (parts.format1.sanitize (c));
case 2: return_trace (parts.format2.sanitize (c));
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh
index c0b0e3751f3..95d6b312ab5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh
@@ -28,6 +28,7 @@
#define HB_AAT_LAYOUT_COMMON_HH
#include "hb-aat-layout.hh"
+#include "hb-open-type.hh"
namespace AAT {
@@ -47,18 +48,18 @@ struct LookupFormat0
friend struct Lookup<T>;
private:
- inline const T* get_value (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
+ const T* get_value (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
{
if (unlikely (glyph_id >= num_glyphs)) return nullptr;
return &arrayZ[glyph_id];
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (arrayZ.sanitize (c, c->get_num_glyphs ()));
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (arrayZ.sanitize (c, c->get_num_glyphs (), base));
@@ -78,16 +79,15 @@ struct LookupSegmentSingle
{
enum { TerminationWordCount = 2 };
- inline int cmp (hb_codepoint_t g) const {
- return g < first ? -1 : g <= last ? 0 : +1 ;
- }
+ int cmp (hb_codepoint_t g) const
+ { return g < first ? -1 : g <= last ? 0 : +1 ; }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && value.sanitize (c));
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && value.sanitize (c, base));
@@ -106,18 +106,18 @@ struct LookupFormat2
friend struct Lookup<T>;
private:
- inline const T* get_value (hb_codepoint_t glyph_id) const
+ const T* get_value (hb_codepoint_t glyph_id) const
{
const LookupSegmentSingle<T> *v = segments.bsearch (glyph_id);
return v ? &v->value : nullptr;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (segments.sanitize (c));
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (segments.sanitize (c, base));
@@ -138,16 +138,15 @@ struct LookupSegmentArray
{
enum { TerminationWordCount = 2 };
- inline const T* get_value (hb_codepoint_t glyph_id, const void *base) const
+ const T* get_value (hb_codepoint_t glyph_id, const void *base) const
{
return first <= glyph_id && glyph_id <= last ? &(base+valuesZ)[glyph_id - first] : nullptr;
}
- inline int cmp (hb_codepoint_t g) const {
- return g < first ? -1 : g <= last ? 0 : +1 ;
- }
+ int cmp (hb_codepoint_t g) const
+ { return g < first ? -1 : g <= last ? 0 : +1; }
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -155,7 +154,7 @@ struct LookupSegmentArray
valuesZ.sanitize (c, base, last - first + 1));
}
template <typename T2>
- inline bool sanitize (hb_sanitize_context_t *c, const void *base, T2 user_data) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base, T2 user_data) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -178,18 +177,18 @@ struct LookupFormat4
friend struct Lookup<T>;
private:
- inline const T* get_value (hb_codepoint_t glyph_id) const
+ const T* get_value (hb_codepoint_t glyph_id) const
{
const LookupSegmentArray<T> *v = segments.bsearch (glyph_id);
return v ? v->get_value (glyph_id, this) : nullptr;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (segments.sanitize (c, this));
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (segments.sanitize (c, this, base));
@@ -210,14 +209,14 @@ struct LookupSingle
{
enum { TerminationWordCount = 1 };
- inline int cmp (hb_codepoint_t g) const { return glyph.cmp (g); }
+ int cmp (hb_codepoint_t g) const { return glyph.cmp (g); }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && value.sanitize (c));
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && value.sanitize (c, base));
@@ -235,18 +234,18 @@ struct LookupFormat6
friend struct Lookup<T>;
private:
- inline const T* get_value (hb_codepoint_t glyph_id) const
+ const T* get_value (hb_codepoint_t glyph_id) const
{
const LookupSingle<T> *v = entries.bsearch (glyph_id);
return v ? &v->value : nullptr;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (entries.sanitize (c));
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (entries.sanitize (c, base));
@@ -266,18 +265,18 @@ struct LookupFormat8
friend struct Lookup<T>;
private:
- inline const T* get_value (hb_codepoint_t glyph_id) const
+ const T* get_value (hb_codepoint_t glyph_id) const
{
return firstGlyph <= glyph_id && glyph_id - firstGlyph < glyphCount ?
&valueArrayZ[glyph_id - firstGlyph] : nullptr;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && valueArrayZ.sanitize (c, glyphCount));
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && valueArrayZ.sanitize (c, glyphCount, base));
@@ -301,7 +300,7 @@ struct LookupFormat10
friend struct Lookup<T>;
private:
- inline const typename T::type get_value_or_null (hb_codepoint_t glyph_id) const
+ const typename T::type get_value_or_null (hb_codepoint_t glyph_id) const
{
if (!(firstGlyph <= glyph_id && glyph_id - firstGlyph < glyphCount))
return Null(T);
@@ -316,7 +315,7 @@ struct LookupFormat10
return v;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -340,7 +339,7 @@ struct LookupFormat10
template <typename T>
struct Lookup
{
- inline const T* get_value (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
+ const T* get_value (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
{
switch (u.format) {
case 0: return u.format0.get_value (glyph_id, num_glyphs);
@@ -352,7 +351,7 @@ struct Lookup
}
}
- inline const typename T::type get_value_or_null (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
+ const typename T::type get_value_or_null (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
{
switch (u.format) {
/* Format 10 cannot return a pointer. */
@@ -363,15 +362,15 @@ struct Lookup
}
}
- inline typename T::type get_class (hb_codepoint_t glyph_id,
- unsigned int num_glyphs,
- unsigned int outOfRange) const
+ typename T::type get_class (hb_codepoint_t glyph_id,
+ unsigned int num_glyphs,
+ unsigned int outOfRange) const
{
const T *v = get_value (glyph_id, num_glyphs);
return v ? *v : outOfRange;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return_trace (false);
@@ -385,7 +384,7 @@ struct Lookup
default:return_trace (true);
}
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return_trace (false);
@@ -420,17 +419,14 @@ struct Lookup
/* Ugly hand-coded null objects for template Lookup<> :(. */
extern HB_INTERNAL const unsigned char _hb_Null_AAT_Lookup[2];
template <>
-/*static*/ inline const AAT::Lookup<OT::HBUINT16>& Null<AAT::Lookup<OT::HBUINT16> > (void) {
- return *reinterpret_cast<const AAT::Lookup<OT::HBUINT16> *> (_hb_Null_AAT_Lookup);
-}
+/*static*/ inline const AAT::Lookup<OT::HBUINT16>& Null<AAT::Lookup<OT::HBUINT16> > ()
+{ return *reinterpret_cast<const AAT::Lookup<OT::HBUINT16> *> (_hb_Null_AAT_Lookup); }
template <>
-/*static*/ inline const AAT::Lookup<OT::HBUINT32>& Null<AAT::Lookup<OT::HBUINT32> > (void) {
- return *reinterpret_cast<const AAT::Lookup<OT::HBUINT32> *> (_hb_Null_AAT_Lookup);
-}
+/*static*/ inline const AAT::Lookup<OT::HBUINT32>& Null<AAT::Lookup<OT::HBUINT32> > ()
+{ return *reinterpret_cast<const AAT::Lookup<OT::HBUINT32> *> (_hb_Null_AAT_Lookup); }
template <>
-/*static*/ inline const AAT::Lookup<OT::Offset<OT::HBUINT16, false> >& Null<AAT::Lookup<OT::Offset<OT::HBUINT16, false> > > (void) {
- return *reinterpret_cast<const AAT::Lookup<OT::Offset<OT::HBUINT16, false> > *> (_hb_Null_AAT_Lookup);
-}
+/*static*/ inline const AAT::Lookup<OT::Offset<OT::HBUINT16, false> >& Null<AAT::Lookup<OT::Offset<OT::HBUINT16, false> > > ()
+{ return *reinterpret_cast<const AAT::Lookup<OT::Offset<OT::HBUINT16, false> > *> (_hb_Null_AAT_Lookup); }
namespace AAT {
enum { DELETED_GLYPH = 0xFFFF };
@@ -442,7 +438,7 @@ enum { DELETED_GLYPH = 0xFFFF };
template <typename T>
struct Entry
{
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int count) const
+ bool sanitize (hb_sanitize_context_t *c, unsigned int count) const
{
TRACE_SANITIZE (this);
/* Note, we don't recurse-sanitize data because we don't access it.
@@ -470,7 +466,7 @@ struct Entry
template <>
struct Entry<void>
{
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int count /*XXX Unused?*/) const
+ bool sanitize (hb_sanitize_context_t *c, unsigned int count /*XXX Unused?*/) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -503,21 +499,19 @@ struct StateTable
CLASS_END_OF_LINE = 3,
};
- inline int new_state (unsigned int newState) const
- { return Types::extended ? newState : ((int) newState - (int) stateArrayTable) / nClasses; }
+ int new_state (unsigned int newState) const
+ { return Types::extended ? newState : ((int) newState - (int) stateArrayTable) / (int) nClasses; }
- inline unsigned int get_class (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
+ unsigned int get_class (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
{
if (unlikely (glyph_id == DELETED_GLYPH)) return CLASS_DELETED_GLYPH;
return (this+classTable).get_class (glyph_id, num_glyphs, 1);
}
- inline const Entry<Extra> *get_entries () const
- {
- return (this+entryTable).arrayZ;
- }
+ const Entry<Extra> *get_entries () const
+ { return (this+entryTable).arrayZ; }
- inline const Entry<Extra> *get_entryZ (int state, unsigned int klass) const
+ const Entry<Extra> *get_entryZ (int state, unsigned int klass) const
{
if (unlikely (klass >= nClasses)) return nullptr;
@@ -530,8 +524,8 @@ struct StateTable
return &entries[entry];
}
- inline bool sanitize (hb_sanitize_context_t *c,
- unsigned int *num_entries_out = nullptr) const
+ bool sanitize (hb_sanitize_context_t *c,
+ unsigned int *num_entries_out = nullptr) const
{
TRACE_SANITIZE (this);
if (unlikely (!(c->check_struct (this) &&
@@ -649,18 +643,18 @@ struct StateTable
template <typename HBUCHAR>
struct ClassTable
{
- inline unsigned int get_class (hb_codepoint_t glyph_id, unsigned int outOfRange) const
+ unsigned int get_class (hb_codepoint_t glyph_id, unsigned int outOfRange) const
{
unsigned int i = glyph_id - firstGlyph;
return i >= classArray.len ? outOfRange : classArray.arrayZ[i];
}
- inline unsigned int get_class (hb_codepoint_t glyph_id,
- unsigned int num_glyphs HB_UNUSED,
- unsigned int outOfRange) const
+ unsigned int get_class (hb_codepoint_t glyph_id,
+ unsigned int num_glyphs HB_UNUSED,
+ unsigned int outOfRange) const
{
return get_class (glyph_id, outOfRange);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && classArray.sanitize (c));
@@ -675,60 +669,60 @@ struct ClassTable
struct ObsoleteTypes
{
- static const bool extended = false;
+ enum { extended = false };
typedef HBUINT16 HBUINT;
typedef HBUINT8 HBUSHORT;
typedef ClassTable<HBUINT8> ClassTypeNarrow;
typedef ClassTable<HBUINT16> ClassTypeWide;
template <typename T>
- static inline unsigned int offsetToIndex (unsigned int offset,
- const void *base,
- const T *array)
+ static unsigned int offsetToIndex (unsigned int offset,
+ const void *base,
+ const T *array)
{
return (offset - ((const char *) array - (const char *) base)) / sizeof (T);
}
template <typename T>
- static inline unsigned int byteOffsetToIndex (unsigned int offset,
- const void *base,
- const T *array)
+ static unsigned int byteOffsetToIndex (unsigned int offset,
+ const void *base,
+ const T *array)
{
return offsetToIndex (offset, base, array);
}
template <typename T>
- static inline unsigned int wordOffsetToIndex (unsigned int offset,
- const void *base,
- const T *array)
+ static unsigned int wordOffsetToIndex (unsigned int offset,
+ const void *base,
+ const T *array)
{
return offsetToIndex (2 * offset, base, array);
}
};
struct ExtendedTypes
{
- static const bool extended = true;
+ enum { extended = true };
typedef HBUINT32 HBUINT;
typedef HBUINT16 HBUSHORT;
typedef Lookup<HBUINT16> ClassTypeNarrow;
typedef Lookup<HBUINT16> ClassTypeWide;
template <typename T>
- static inline unsigned int offsetToIndex (unsigned int offset,
- const void *base,
- const T *array)
+ static unsigned int offsetToIndex (unsigned int offset,
+ const void *base,
+ const T *array)
{
return offset;
}
template <typename T>
- static inline unsigned int byteOffsetToIndex (unsigned int offset,
- const void *base,
- const T *array)
+ static unsigned int byteOffsetToIndex (unsigned int offset,
+ const void *base,
+ const T *array)
{
return offset / 2;
}
template <typename T>
- static inline unsigned int wordOffsetToIndex (unsigned int offset,
- const void *base,
- const T *array)
+ static unsigned int wordOffsetToIndex (unsigned int offset,
+ const void *base,
+ const T *array)
{
return offset;
}
@@ -737,15 +731,15 @@ struct ExtendedTypes
template <typename Types, typename EntryData>
struct StateTableDriver
{
- inline StateTableDriver (const StateTable<Types, EntryData> &machine_,
- hb_buffer_t *buffer_,
- hb_face_t *face_) :
+ StateTableDriver (const StateTable<Types, EntryData> &machine_,
+ hb_buffer_t *buffer_,
+ hb_face_t *face_) :
machine (machine_),
buffer (buffer_),
num_glyphs (face_->get_num_glyphs ()) {}
template <typename context_t>
- inline void drive (context_t *c)
+ void drive (context_t *c)
{
if (!c->in_place)
buffer->clear_output ();
@@ -819,10 +813,10 @@ struct ankr;
struct hb_aat_apply_context_t :
hb_dispatch_context_t<hb_aat_apply_context_t, bool, HB_DEBUG_APPLY>
{
- inline const char *get_name (void) { return "APPLY"; }
+ const char *get_name () { return "APPLY"; }
template <typename T>
- inline return_t dispatch (const T &obj) { return obj.apply (this); }
- static return_t default_return_value (void) { return false; }
+ return_t dispatch (const T &obj) { return obj.apply (this); }
+ static return_t default_return_value () { return false; }
bool stop_sublookup_iteration (return_t r) const { return r; }
const hb_ot_shape_plan_t *plan;
@@ -842,11 +836,11 @@ struct hb_aat_apply_context_t :
hb_buffer_t *buffer_,
hb_blob_t *blob = const_cast<hb_blob_t *> (&Null(hb_blob_t)));
- HB_INTERNAL ~hb_aat_apply_context_t (void);
+ HB_INTERNAL ~hb_aat_apply_context_t ();
HB_INTERNAL void set_ankr_table (const AAT::ankr *ankr_table_, const char *ankr_end_);
- inline void set_lookup_index (unsigned int i) { lookup_index = i; }
+ void set_lookup_index (unsigned int i) { lookup_index = i; }
};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-feat-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-feat-table.hh
index 4e63ec8e855..63c69a20f9f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-feat-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-feat-table.hh
@@ -44,10 +44,10 @@ struct SettingName
int cmp (hb_aat_layout_feature_selector_t key) const
{ return (int) key - (int) setting; }
- inline hb_aat_layout_feature_selector_t get_selector (void) const
+ hb_aat_layout_feature_selector_t get_selector () const
{ return (hb_aat_layout_feature_selector_t) (unsigned) setting; }
- inline void get_info (hb_aat_layout_feature_selector_info_t *s,
+ void get_info (hb_aat_layout_feature_selector_info_t *s,
hb_aat_layout_feature_selector_t default_selector) const
{
s->name_id = nameIndex;
@@ -60,7 +60,7 @@ struct SettingName
s->reserved = 0;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -95,11 +95,11 @@ struct FeatureName
* as the default. */
};
- inline unsigned int get_selector_infos (unsigned int start_offset,
- unsigned int *selectors_count, /* IN/OUT. May be NULL. */
- hb_aat_layout_feature_selector_info_t *selectors, /* OUT. May be NULL. */
- unsigned int *pdefault_index, /* OUT. May be NULL. */
- const void *base) const
+ unsigned int get_selector_infos (unsigned int start_offset,
+ unsigned int *selectors_count, /* IN/OUT. May be NULL. */
+ hb_aat_layout_feature_selector_info_t *selectors, /* OUT. May be NULL. */
+ unsigned int *pdefault_index, /* OUT. May be NULL. */
+ const void *base) const
{
hb_array_t< const SettingName> settings_table = (base+settingTableZ).as_array (nSettings);
@@ -125,12 +125,12 @@ struct FeatureName
return settings_table.len;
}
- inline hb_aat_layout_feature_type_t get_feature_type () const
+ hb_aat_layout_feature_type_t get_feature_type () const
{ return (hb_aat_layout_feature_type_t) (unsigned int) feature; }
- inline hb_ot_name_id_t get_feature_name_id () const { return nameIndex; }
+ hb_ot_name_id_t get_feature_name_id () const { return nameIndex; }
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -155,13 +155,13 @@ struct FeatureName
struct feat
{
- static const hb_tag_t tableTag = HB_AAT_TAG_feat;
+ enum { tableTag = HB_AAT_TAG_feat };
- inline bool has_data (void) const { return version.to_int (); }
+ bool has_data () const { return version.to_int (); }
- inline unsigned int get_feature_types (unsigned int start_offset,
- unsigned int *count,
- hb_aat_layout_feature_type_t *features) const
+ unsigned int get_feature_types (unsigned int start_offset,
+ unsigned int *count,
+ hb_aat_layout_feature_type_t *features) const
{
unsigned int feature_count = featureNameCount;
if (count && *count)
@@ -174,25 +174,25 @@ struct feat
return featureNameCount;
}
- inline const FeatureName& get_feature (hb_aat_layout_feature_type_t feature_type) const
+ const FeatureName& get_feature (hb_aat_layout_feature_type_t feature_type) const
{
return namesZ.bsearch (featureNameCount, feature_type);
}
- inline hb_ot_name_id_t get_feature_name_id (hb_aat_layout_feature_type_t feature) const
+ hb_ot_name_id_t get_feature_name_id (hb_aat_layout_feature_type_t feature) const
{ return get_feature (feature).get_feature_name_id (); }
- inline unsigned int get_selector_infos (hb_aat_layout_feature_type_t feature_type,
- unsigned int start_offset,
- unsigned int *selectors_count, /* IN/OUT. May be NULL. */
- hb_aat_layout_feature_selector_info_t *selectors, /* OUT. May be NULL. */
- unsigned int *default_index /* OUT. May be NULL. */) const
+ unsigned int get_selector_infos (hb_aat_layout_feature_type_t feature_type,
+ unsigned int start_offset,
+ unsigned int *selectors_count, /* IN/OUT. May be NULL. */
+ hb_aat_layout_feature_selector_info_t *selectors, /* OUT. May be NULL. */
+ unsigned int *default_index /* OUT. May be NULL. */) const
{
return get_feature (feature_type).get_selector_infos (start_offset, selectors_count, selectors,
default_index, this);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-just-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-just-table.hh
index 92ca6603e16..d39945abd6b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-just-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-just-table.hh
@@ -45,7 +45,7 @@ using namespace OT;
struct ActionSubrecordHeader
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -62,7 +62,7 @@ struct ActionSubrecordHeader
struct DecompositionAction
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -91,7 +91,7 @@ struct DecompositionAction
struct UnconditionalAddGlyphAction
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -109,7 +109,7 @@ struct UnconditionalAddGlyphAction
struct ConditionalAddGlyphAction
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -134,7 +134,7 @@ struct ConditionalAddGlyphAction
struct DuctileGlyphAction
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -160,7 +160,7 @@ struct DuctileGlyphAction
struct RepeatedAddGlyphAction
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -178,9 +178,9 @@ struct RepeatedAddGlyphAction
struct ActionSubrecord
{
- inline unsigned int get_length (void) const { return u.header.actionLength; }
+ unsigned int get_length () const { return u.header.actionLength; }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!c->check_struct (this)))
@@ -215,7 +215,7 @@ struct ActionSubrecord
struct PostcompensationActionChain
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!c->check_struct (this)))
@@ -291,7 +291,7 @@ struct JustWidthDeltaEntry
struct WidthDeltaPair
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -328,7 +328,7 @@ struct JustificationCategory
* glyph if nonzero. */
};
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -347,7 +347,7 @@ struct JustificationCategory
struct JustificationHeader
{
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -382,9 +382,9 @@ struct JustificationHeader
struct just
{
- static const hb_tag_t tableTag = HB_AAT_TAG_just;
+ enum { tableTag = HB_AAT_TAG_just };
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
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
index 7caf45d5dd1..291f3e35b40 100644
--- 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
@@ -66,17 +66,16 @@ struct hb_glyph_pair_t
struct KernPair
{
- inline int get_kerning (void) const
- { return value; }
+ int get_kerning () const { return value; }
- inline int cmp (const hb_glyph_pair_t &o) const
+ int cmp (const hb_glyph_pair_t &o) const
{
int ret = left.cmp (o.left);
if (ret) return ret;
return right.cmp (o.right);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -93,15 +92,15 @@ struct KernPair
template <typename KernSubTableHeader>
struct KerxSubTableFormat0
{
- inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right,
- hb_aat_apply_context_t *c = nullptr) const
+ int get_kerning (hb_codepoint_t left, hb_codepoint_t right,
+ hb_aat_apply_context_t *c = nullptr) const
{
hb_glyph_pair_t pair = {left, right};
int v = pairs.bsearch (pair).get_kerning ();
return kerxTupleKern (v, header.tuple_count (), this, c);
}
- inline bool apply (hb_aat_apply_context_t *c) const
+ bool apply (hb_aat_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -123,16 +122,16 @@ struct KerxSubTableFormat0
const KerxSubTableFormat0 &table;
hb_aat_apply_context_t *c;
- inline accelerator_t (const KerxSubTableFormat0 &table_,
- hb_aat_apply_context_t *c_) :
- table (table_), c (c_) {}
+ accelerator_t (const KerxSubTableFormat0 &table_,
+ hb_aat_apply_context_t *c_) :
+ table (table_), c (c_) {}
- inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
+ int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
{ return table.get_kerning (left, right, c); }
};
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (pairs.sanitize (c)));
@@ -171,10 +170,10 @@ struct Format1Entry<true>
DEFINE_SIZE_STATIC (2);
};
- static inline bool performAction (const Entry<EntryData> *entry)
+ static bool performAction (const Entry<EntryData> *entry)
{ return entry->data.kernActionIndex != 0xFFFF; }
- static inline unsigned int kernActionIndex (const Entry<EntryData> *entry)
+ static unsigned int kernActionIndex (const Entry<EntryData> *entry)
{ return entry->data.kernActionIndex; }
};
template <>
@@ -193,10 +192,10 @@ struct Format1Entry<false>
typedef void EntryData;
- static inline bool performAction (const Entry<EntryData> *entry)
+ static bool performAction (const Entry<EntryData> *entry)
{ return entry->flags & Offset; }
- static inline unsigned int kernActionIndex (const Entry<EntryData> *entry)
+ static unsigned int kernActionIndex (const Entry<EntryData> *entry)
{ return entry->flags & Offset; }
};
@@ -211,14 +210,14 @@ struct KerxSubTableFormat1
struct driver_context_t
{
- static const bool in_place = true;
+ enum { in_place = true };
enum
{
DontAdvance = Format1EntryT::DontAdvance,
};
- inline driver_context_t (const KerxSubTableFormat1 *table_,
- hb_aat_apply_context_t *c_) :
+ driver_context_t (const KerxSubTableFormat1 *table_,
+ hb_aat_apply_context_t *c_) :
c (c_),
table (table_),
/* Apparently the offset kernAction is from the beginning of the state-machine,
@@ -228,13 +227,13 @@ struct KerxSubTableFormat1
depth (0),
crossStream (table->header.coverage & table->header.CrossStream) {}
- inline bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
- const Entry<EntryData> *entry)
+ bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
+ const Entry<EntryData> *entry)
{
return Format1EntryT::performAction (entry);
}
- inline bool transition (StateTableDriver<Types, EntryData> *driver,
- const Entry<EntryData> *entry)
+ bool transition (StateTableDriver<Types, EntryData> *driver,
+ const Entry<EntryData> *entry)
{
hb_buffer_t *buffer = driver->buffer;
unsigned int flags = entry->flags;
@@ -348,7 +347,7 @@ struct KerxSubTableFormat1
bool crossStream;
};
- inline bool apply (hb_aat_apply_context_t *c) const
+ bool apply (hb_aat_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -364,7 +363,7 @@ struct KerxSubTableFormat1
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
/* The rest of array sanitizations are done at run-time. */
@@ -386,8 +385,8 @@ struct KerxSubTableFormat2
typedef typename KernSubTableHeader::Types Types;
typedef typename Types::HBUINT HBUINT;
- inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right,
- hb_aat_apply_context_t *c) const
+ int get_kerning (hb_codepoint_t left, hb_codepoint_t right,
+ hb_aat_apply_context_t *c) const
{
unsigned int num_glyphs = c->sanitizer.get_num_glyphs ();
unsigned int l = (this+leftClassTable).get_class (left, num_glyphs, 0);
@@ -402,7 +401,7 @@ struct KerxSubTableFormat2
return kerxTupleKern (*v, header.tuple_count (), this, c);
}
- inline bool apply (hb_aat_apply_context_t *c) const
+ bool apply (hb_aat_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -424,15 +423,15 @@ struct KerxSubTableFormat2
const KerxSubTableFormat2 &table;
hb_aat_apply_context_t *c;
- inline accelerator_t (const KerxSubTableFormat2 &table_,
- hb_aat_apply_context_t *c_) :
- table (table_), c (c_) {}
+ accelerator_t (const KerxSubTableFormat2 &table_,
+ hb_aat_apply_context_t *c_) :
+ table (table_), c (c_) {}
- inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
+ int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
{ return table.get_kerning (left, right, c); }
};
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -472,7 +471,7 @@ struct KerxSubTableFormat4
struct driver_context_t
{
- static const bool in_place = true;
+ enum { in_place = true };
enum Flags
{
Mark = 0x8000, /* If set, remember this glyph as the marked glyph. */
@@ -490,7 +489,7 @@ struct KerxSubTableFormat4
* point table. */
};
- inline driver_context_t (const KerxSubTableFormat4 *table,
+ driver_context_t (const KerxSubTableFormat4 *table,
hb_aat_apply_context_t *c_) :
c (c_),
action_type ((table->flags & ActionType) >> 30),
@@ -498,13 +497,13 @@ struct KerxSubTableFormat4
mark_set (false),
mark (0) {}
- inline bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
- const Entry<EntryData> *entry)
+ bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
+ const Entry<EntryData> *entry)
{
return entry->data.ankrActionIndex != 0xFFFF;
}
- inline bool transition (StateTableDriver<Types, EntryData> *driver,
- const Entry<EntryData> *entry)
+ bool transition (StateTableDriver<Types, EntryData> *driver,
+ const Entry<EntryData> *entry)
{
hb_buffer_t *buffer = driver->buffer;
@@ -599,7 +598,7 @@ struct KerxSubTableFormat4
unsigned int mark;
};
- inline bool apply (hb_aat_apply_context_t *c) const
+ bool apply (hb_aat_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -611,7 +610,7 @@ struct KerxSubTableFormat4
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
/* The rest of array sanitizations are done at run-time. */
@@ -635,9 +634,9 @@ struct KerxSubTableFormat6
ValuesAreLong = 0x00000001,
};
- inline bool is_long (void) const { return flags & ValuesAreLong; }
+ bool is_long () const { return flags & ValuesAreLong; }
- inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right,
+ int get_kerning (hb_codepoint_t left, hb_codepoint_t right,
hb_aat_apply_context_t *c) const
{
unsigned int num_glyphs = c->sanitizer.get_num_glyphs ();
@@ -665,7 +664,7 @@ struct KerxSubTableFormat6
}
}
- inline bool apply (hb_aat_apply_context_t *c) const
+ bool apply (hb_aat_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -682,7 +681,7 @@ struct KerxSubTableFormat6
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -705,11 +704,11 @@ struct KerxSubTableFormat6
const KerxSubTableFormat6 &table;
hb_aat_apply_context_t *c;
- inline accelerator_t (const KerxSubTableFormat6 &table_,
- hb_aat_apply_context_t *c_) :
- table (table_), c (c_) {}
+ accelerator_t (const KerxSubTableFormat6 &table_,
+ hb_aat_apply_context_t *c_) :
+ table (table_), c (c_) {}
- inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
+ int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
{ return table.get_kerning (left, right, c); }
};
@@ -743,8 +742,8 @@ struct KerxSubTableHeader
{
typedef ExtendedTypes Types;
- inline unsigned int tuple_count (void) const { return tupleCount; }
- inline bool is_horizontal (void) const { return !(coverage & Vertical); }
+ unsigned int tuple_count () const { return tupleCount; }
+ bool is_horizontal () const { return !(coverage & Vertical); }
enum Coverage
{
@@ -760,7 +759,7 @@ struct KerxSubTableHeader
SubtableType= 0x000000FFu, /* Subtable type. */
};
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -778,11 +777,11 @@ struct KerxSubTable
{
friend struct kerx;
- inline unsigned int get_size (void) const { return u.header.length; }
- inline unsigned int get_type (void) const { return u.header.coverage & u.header.SubtableType; }
+ unsigned int get_size () const { return u.header.length; }
+ unsigned int get_type () const { return u.header.coverage & u.header.SubtableType; }
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
unsigned int subtable_type = get_type ();
TRACE_DISPATCH (this, subtable_type);
@@ -796,7 +795,7 @@ struct KerxSubTable
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!u.header.sanitize (c) ||
@@ -829,9 +828,9 @@ template <typename T>
struct KerxTable
{
/* https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern */
- inline const T* thiz (void) const { return static_cast<const T *> (this); }
+ const T* thiz () const { return static_cast<const T *> (this); }
- inline bool has_state_machine (void) const
+ bool has_state_machine () const
{
typedef typename T::SubTable SubTable;
@@ -846,7 +845,7 @@ struct KerxTable
return false;
}
- inline bool has_cross_stream (void) const
+ bool has_cross_stream () const
{
typedef typename T::SubTable SubTable;
@@ -861,7 +860,7 @@ struct KerxTable
return false;
}
- inline int get_h_kerning (hb_codepoint_t left, hb_codepoint_t right) const
+ int get_h_kerning (hb_codepoint_t left, hb_codepoint_t right) const
{
typedef typename T::SubTable SubTable;
@@ -879,7 +878,7 @@ struct KerxTable
return v;
}
- inline bool apply (AAT::hb_aat_apply_context_t *c) const
+ bool apply (AAT::hb_aat_apply_context_t *c) const
{
typedef typename T::SubTable SubTable;
@@ -943,11 +942,11 @@ struct KerxTable
return ret;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!thiz()->version.sanitize (c) ||
- thiz()->version < T::minVersion ||
+ (unsigned) thiz()->version < (unsigned) T::minVersion ||
!thiz()->tableCount.sanitize (c)))
return_trace (false);
@@ -982,14 +981,14 @@ struct kerx : KerxTable<kerx>
{
friend struct KerxTable<kerx>;
- static const hb_tag_t tableTag = HB_AAT_TAG_kerx;
- static const uint16_t minVersion = 2;
+ enum { tableTag = HB_AAT_TAG_kerx };
+ enum { minVersion = 2u };
typedef KerxSubTableHeader SubTableHeader;
typedef SubTableHeader::Types Types;
typedef KerxSubTable SubTable;
- inline bool has_data (void) const { return version; }
+ bool has_data () const { return version; }
protected:
HBUINT16 version; /* The version number of the extended kerning table
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-lcar-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-lcar-table.hh
index 40d34f59bf0..cac96971721 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-lcar-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-lcar-table.hh
@@ -40,14 +40,14 @@ typedef ArrayOf<HBINT16> LigCaretClassEntry;
struct lcar
{
- static const hb_tag_t tableTag = HB_AAT_TAG_lcar;
+ enum { tableTag = HB_AAT_TAG_lcar };
- inline unsigned int get_lig_carets (hb_font_t *font,
- hb_direction_t direction,
- hb_codepoint_t glyph,
- unsigned int start_offset,
- unsigned int *caret_count /* IN/OUT */,
- hb_position_t *caret_array /* OUT */) const
+ unsigned int get_lig_carets (hb_font_t *font,
+ hb_direction_t direction,
+ hb_codepoint_t glyph,
+ unsigned int start_offset,
+ unsigned int *caret_count /* IN/OUT */,
+ hb_position_t *caret_array /* OUT */) const
{
const OffsetTo<LigCaretClassEntry>* entry_offset = lookup.get_value (glyph,
font->face->get_num_glyphs ());
@@ -70,7 +70,7 @@ struct lcar
return array.len;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
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 171ee4a10b2..c7600aa25dc 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
@@ -54,7 +54,7 @@ struct RearrangementSubtable
struct driver_context_t
{
- static const bool in_place = true;
+ enum { in_place = true };
enum Flags
{
MarkFirst = 0x8000, /* If set, make the current glyph the first
@@ -69,17 +69,17 @@ struct RearrangementSubtable
Verb = 0x000F, /* The type of rearrangement specified. */
};
- inline driver_context_t (const RearrangementSubtable *table HB_UNUSED) :
+ driver_context_t (const RearrangementSubtable *table HB_UNUSED) :
ret (false),
start (0), end (0) {}
- inline bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
- const Entry<EntryData> *entry)
+ bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
+ const Entry<EntryData> *entry)
{
return (entry->flags & Verb) && start < end;
}
- inline bool transition (StateTableDriver<Types, EntryData> *driver,
- const Entry<EntryData> *entry)
+ bool transition (StateTableDriver<Types, EntryData> *driver,
+ const Entry<EntryData> *entry)
{
hb_buffer_t *buffer = driver->buffer;
unsigned int flags = entry->flags;
@@ -163,7 +163,7 @@ struct RearrangementSubtable
unsigned int end;
};
- inline bool apply (hb_aat_apply_context_t *c) const
+ bool apply (hb_aat_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -175,7 +175,7 @@ struct RearrangementSubtable
return_trace (dc.ret);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (machine.sanitize (c));
@@ -204,7 +204,7 @@ struct ContextualSubtable
struct driver_context_t
{
- static const bool in_place = true;
+ enum { in_place = true };
enum Flags
{
SetMark = 0x8000, /* If set, make the current glyph the marked glyph. */
@@ -213,7 +213,7 @@ struct ContextualSubtable
Reserved = 0x3FFF, /* These bits are reserved and should be set to 0. */
};
- inline driver_context_t (const ContextualSubtable *table_,
+ driver_context_t (const ContextualSubtable *table_,
hb_aat_apply_context_t *c_) :
ret (false),
c (c_),
@@ -222,8 +222,8 @@ struct ContextualSubtable
table (table_),
subs (table+table->substitutionTables) {}
- inline bool is_actionable (StateTableDriver<Types, EntryData> *driver,
- const Entry<EntryData> *entry)
+ bool is_actionable (StateTableDriver<Types, EntryData> *driver,
+ const Entry<EntryData> *entry)
{
hb_buffer_t *buffer = driver->buffer;
@@ -232,8 +232,8 @@ struct ContextualSubtable
return entry->data.markIndex != 0xFFFF || entry->data.currentIndex != 0xFFFF;
}
- inline bool transition (StateTableDriver<Types, EntryData> *driver,
- const Entry<EntryData> *entry)
+ bool transition (StateTableDriver<Types, EntryData> *driver,
+ const Entry<EntryData> *entry)
{
hb_buffer_t *buffer = driver->buffer;
@@ -311,7 +311,7 @@ struct ContextualSubtable
const UnsizedOffsetListOf<Lookup<GlyphID>, HBUINT, false> &subs;
};
- inline bool apply (hb_aat_apply_context_t *c) const
+ bool apply (hb_aat_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -323,7 +323,7 @@ struct ContextualSubtable
return_trace (dc.ret);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -384,10 +384,10 @@ struct LigatureEntry<true>
DEFINE_SIZE_STATIC (2);
};
- static inline bool performAction (const Entry<EntryData> *entry)
+ static bool performAction (const Entry<EntryData> *entry)
{ return entry->flags & PerformAction; }
- static inline unsigned int ligActionIndex (const Entry<EntryData> *entry)
+ static unsigned int ligActionIndex (const Entry<EntryData> *entry)
{ return entry->data.ligActionIndex; }
};
template <>
@@ -406,10 +406,10 @@ struct LigatureEntry<false>
typedef void EntryData;
- static inline bool performAction (const Entry<EntryData> *entry)
+ static bool performAction (const Entry<EntryData> *entry)
{ return entry->flags & Offset; }
- static inline unsigned int ligActionIndex (const Entry<EntryData> *entry)
+ static unsigned int ligActionIndex (const Entry<EntryData> *entry)
{ return entry->flags & Offset; }
};
@@ -424,7 +424,7 @@ struct LigatureSubtable
struct driver_context_t
{
- static const bool in_place = false;
+ enum { in_place = false };
enum
{
DontAdvance = LigatureEntryT::DontAdvance,
@@ -441,8 +441,8 @@ struct LigatureSubtable
* into the component table. */
};
- inline driver_context_t (const LigatureSubtable *table_,
- hb_aat_apply_context_t *c_) :
+ driver_context_t (const LigatureSubtable *table_,
+ hb_aat_apply_context_t *c_) :
ret (false),
c (c_),
table (table_),
@@ -451,13 +451,13 @@ struct LigatureSubtable
ligature (table+table->ligature),
match_length (0) {}
- inline bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
- const Entry<EntryData> *entry)
+ bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
+ const Entry<EntryData> *entry)
{
return LigatureEntryT::performAction (entry);
}
- inline bool transition (StateTableDriver<Types, EntryData> *driver,
- const Entry<EntryData> *entry)
+ bool transition (StateTableDriver<Types, EntryData> *driver,
+ const Entry<EntryData> *entry)
{
hb_buffer_t *buffer = driver->buffer;
@@ -567,7 +567,7 @@ struct LigatureSubtable
unsigned int match_positions[HB_MAX_CONTEXT_LENGTH];
};
- inline bool apply (hb_aat_apply_context_t *c) const
+ bool apply (hb_aat_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -579,7 +579,7 @@ struct LigatureSubtable
return_trace (dc.ret);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
/* The rest of array sanitizations are done at run-time. */
@@ -603,7 +603,7 @@ struct LigatureSubtable
template <typename Types>
struct NoncontextualSubtable
{
- inline bool apply (hb_aat_apply_context_t *c) const
+ bool apply (hb_aat_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -625,7 +625,7 @@ struct NoncontextualSubtable
return_trace (ret);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (substitute.sanitize (c));
@@ -660,7 +660,7 @@ struct InsertionSubtable
struct driver_context_t
{
- static const bool in_place = false;
+ enum { in_place = false };
enum Flags
{
SetMark = 0x8000, /* If set, mark the current glyph. */
@@ -709,22 +709,22 @@ struct InsertionSubtable
* marked location is 31 glyphs. */
};
- inline driver_context_t (const InsertionSubtable *table,
- hb_aat_apply_context_t *c_) :
+ driver_context_t (const InsertionSubtable *table,
+ hb_aat_apply_context_t *c_) :
ret (false),
c (c_),
mark_set (false),
mark (0),
insertionAction (table+table->insertionAction) {}
- inline bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
- const Entry<EntryData> *entry)
+ bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
+ const Entry<EntryData> *entry)
{
return (entry->flags & (CurrentInsertCount | MarkedInsertCount)) &&
(entry->data.currentInsertIndex != 0xFFFF ||entry->data.markedInsertIndex != 0xFFFF);
}
- inline bool transition (StateTableDriver<Types, EntryData> *driver,
- const Entry<EntryData> *entry)
+ bool transition (StateTableDriver<Types, EntryData> *driver,
+ const Entry<EntryData> *entry)
{
hb_buffer_t *buffer = driver->buffer;
unsigned int flags = entry->flags;
@@ -809,7 +809,7 @@ struct InsertionSubtable
const UnsizedArrayOf<GlyphID> &insertionAction;
};
- inline bool apply (hb_aat_apply_context_t *c) const
+ bool apply (hb_aat_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -821,7 +821,7 @@ struct InsertionSubtable
return_trace (dc.ret);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
/* The rest of array sanitizations are done at run-time. */
@@ -842,7 +842,7 @@ struct InsertionSubtable
struct Feature
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -868,9 +868,9 @@ struct ChainSubtable
template <typename T>
friend struct Chain;
- inline unsigned int get_size (void) const { return length; }
- inline unsigned int get_type (void) const { return coverage & 0xFF; }
- inline unsigned int get_coverage (void) const { return coverage >> (sizeof (HBUINT) * 8 - 8); }
+ unsigned int get_size () const { return length; }
+ unsigned int get_type () const { return coverage & 0xFF; }
+ unsigned int get_coverage () const { return coverage >> (sizeof (HBUINT) * 8 - 8); }
enum Coverage
{
@@ -897,7 +897,7 @@ struct ChainSubtable
};
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
unsigned int subtable_type = get_type ();
TRACE_DISPATCH (this, subtable_type);
@@ -911,14 +911,14 @@ struct ChainSubtable
}
}
- inline bool apply (hb_aat_apply_context_t *c) const
+ bool apply (hb_aat_apply_context_t *c) const
{
TRACE_APPLY (this);
hb_sanitize_with_object_t with (&c->sanitizer, this);
return_trace (dispatch (c));
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!length.sanitize (c) ||
@@ -950,7 +950,7 @@ struct Chain
{
typedef typename Types::HBUINT HBUINT;
- inline hb_mask_t compile_flags (const hb_aat_map_builder_t *map) const
+ hb_mask_t compile_flags (const hb_aat_map_builder_t *map) const
{
hb_mask_t flags = defaultFlags;
{
@@ -979,7 +979,7 @@ struct Chain
return flags;
}
- inline void apply (hb_aat_apply_context_t *c,
+ void apply (hb_aat_apply_context_t *c,
hb_mask_t flags) const
{
const ChainSubtable<Types> *subtable = &StructAfter<ChainSubtable<Types> > (featureZ.as_array (featureCount));
@@ -1049,9 +1049,9 @@ struct Chain
}
}
- inline unsigned int get_size (void) const { return length; }
+ unsigned int get_size () const { return length; }
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int version HB_UNUSED) const
+ bool sanitize (hb_sanitize_context_t *c, unsigned int version HB_UNUSED) const
{
TRACE_SANITIZE (this);
if (!length.sanitize (c) ||
@@ -1096,12 +1096,12 @@ struct Chain
template <typename Types>
struct mortmorx
{
- static const hb_tag_t tableTag = HB_AAT_TAG_morx;
+ enum { tableTag = HB_AAT_TAG_morx };
- inline bool has_data (void) const { return version != 0; }
+ bool has_data () const { return version != 0; }
- inline void compile_flags (const hb_aat_map_builder_t *mapper,
- hb_aat_map_t *map) const
+ void compile_flags (const hb_aat_map_builder_t *mapper,
+ hb_aat_map_t *map) const
{
const Chain<Types> *chain = &firstChain;
unsigned int count = chainCount;
@@ -1112,7 +1112,7 @@ struct mortmorx
}
}
- inline void apply (hb_aat_apply_context_t *c) const
+ void apply (hb_aat_apply_context_t *c) const
{
if (unlikely (!c->buffer->successful)) return;
c->set_lookup_index (0);
@@ -1126,7 +1126,7 @@ struct mortmorx
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!version.sanitize (c) || !version || !chainCount.sanitize (c))
@@ -1158,11 +1158,11 @@ struct mortmorx
struct morx : mortmorx<ExtendedTypes>
{
- static const hb_tag_t tableTag = HB_AAT_TAG_morx;
+ enum { tableTag = HB_AAT_TAG_morx };
};
struct mort : mortmorx<ObsoleteTypes>
{
- static const hb_tag_t tableTag = HB_AAT_TAG_mort;
+ enum { tableTag = HB_AAT_TAG_mort };
};
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
index 5474d1d11b8..0648f6175f7 100644
--- 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
@@ -46,25 +46,19 @@ struct TrackTableEntry
{
friend struct TrackData;
- inline float get_track_value () const
- {
- return track.to_float ();
- }
+ float get_track_value () const { return track.to_float (); }
- inline int get_value (const void *base,
- unsigned int index,
- unsigned int nSizes) const
- {
- return (base+valuesZ).as_array (nSizes)[index];
- }
+ int get_value (const void *base, unsigned int index,
+ unsigned int table_size) const
+ { return (base+valuesZ).as_array (table_size)[index]; }
public:
- inline bool sanitize (hb_sanitize_context_t *c, const void *base,
- unsigned int nSizes) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base,
+ unsigned int table_size) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
- (valuesZ.sanitize (c, base, nSizes))));
+ (valuesZ.sanitize (c, base, table_size))));
}
protected:
@@ -82,10 +76,10 @@ struct TrackTableEntry
struct TrackData
{
- inline float interpolate_at (unsigned int idx,
- float target_size,
- const TrackTableEntry &trackTableEntry,
- const void *base) const
+ float interpolate_at (unsigned int idx,
+ float target_size,
+ const TrackTableEntry &trackTableEntry,
+ const void *base) const
{
unsigned int sizes = nSizes;
hb_array_t<const Fixed> size_table ((base+sizeTable).arrayZ, sizes);
@@ -97,7 +91,7 @@ struct TrackData
(1.f - t) * trackTableEntry.get_value (base, idx, sizes);
}
- inline int get_tracking (const void *base, float ptem) const
+ int get_tracking (const void *base, float ptem) const
{
/* CoreText points are CSS pixels (96 per inch),
* NOT typographic points (72 per inch).
@@ -143,7 +137,7 @@ struct TrackData
*trackTableEntry, base));
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -166,11 +160,11 @@ struct TrackData
struct trak
{
- static const hb_tag_t tableTag = HB_AAT_TAG_trak;
+ enum { tableTag = HB_AAT_TAG_trak };
- inline bool has_data (void) const { return version.to_int (); }
+ bool has_data () const { return version.to_int (); }
- inline bool apply (hb_aat_apply_context_t *c) const
+ bool apply (hb_aat_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -211,7 +205,7 @@ struct trak
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
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 fae67800c00..8de8205f574 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
@@ -29,6 +29,7 @@
#include "hb-ot-face.hh"
#include "hb-aat-layout.hh"
+#include "hb-aat-fdsc-table.hh" // Just so we compile it; unused otherwise.
#include "hb-aat-layout-ankr-table.hh"
#include "hb-aat-layout-bsln-table.hh" // Just so we compile it; unused otherwise.
#include "hb-aat-layout-feat-table.hh"
@@ -166,10 +167,8 @@ AAT::hb_aat_apply_context_t::hb_aat_apply_context_t (const hb_ot_shape_plan_t *p
sanitizer.set_max_ops (HB_SANITIZE_MAX_OPS_MAX);
}
-AAT::hb_aat_apply_context_t::~hb_aat_apply_context_t (void)
-{
- sanitizer.end_processing ();
-}
+AAT::hb_aat_apply_context_t::~hb_aat_apply_context_t ()
+{ sanitizer.end_processing (); }
void
AAT::hb_aat_apply_context_t::set_ankr_table (const AAT::ankr *ankr_table_,
@@ -205,7 +204,14 @@ hb_aat_layout_compile_map (const hb_aat_map_builder_t *mapper,
}
-bool
+/*
+ * hb_aat_layout_has_substitution:
+ * @face:
+ *
+ * Returns:
+ * Since: 2.3.0
+ */
+hb_bool_t
hb_aat_layout_has_substitution (hb_face_t *face)
{
return face->table.morx->has_data () ||
@@ -259,9 +265,14 @@ hb_aat_layout_remove_deleted_glyphs (hb_buffer_t *buffer)
hb_ot_layout_delete_glyphs_inplace (buffer, is_deleted_glyph);
}
-
-
-bool
+/*
+ * hb_aat_layout_has_positioning:
+ * @face:
+ *
+ * Returns:
+ * Since: 2.3.0
+ */
+hb_bool_t
hb_aat_layout_has_positioning (hb_face_t *face)
{
return face->table.kerx->has_data ();
@@ -284,7 +295,14 @@ hb_aat_layout_position (const hb_ot_shape_plan_t *plan,
}
-bool
+/*
+ * hb_aat_layout_has_tracking:
+ * @face:
+ *
+ * Returns:
+ * Since: 2.3.0
+ */
+hb_bool_t
hb_aat_layout_has_tracking (hb_face_t *face)
{
return face->table.trak->has_data ();
@@ -341,7 +359,9 @@ hb_aat_layout_get_feature_types (hb_face_t *face,
hb_ot_name_id_t
hb_aat_layout_feature_type_get_name_id (hb_face_t *face,
hb_aat_layout_feature_type_t feature_type)
-{ return face->table.feat->get_feature_name_id (feature_type); }
+{
+ return face->table.feat->get_feature_name_id (feature_type);
+}
/**
* hb_aat_layout_feature_type_get_selectors:
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.h
index 696e9033409..760aaae40a6 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.h
@@ -457,6 +457,30 @@ hb_aat_layout_feature_type_get_selector_infos (hb_face_t
unsigned int *default_index /* OUT. May be NULL. */);
+/*
+ * morx/mort
+ */
+
+HB_EXTERN hb_bool_t
+hb_aat_layout_has_substitution (hb_face_t *face);
+
+
+/*
+ * kerx
+ */
+
+HB_EXTERN hb_bool_t
+hb_aat_layout_has_positioning (hb_face_t *face);
+
+
+/*
+ * trak
+ */
+
+HB_EXTERN hb_bool_t
+hb_aat_layout_has_tracking (hb_face_t *face);
+
+
HB_END_DECLS
#endif /* HB_AAT_LAYOUT_H */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.hh
index 5fd47ed62ad..8346d9f00b5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.hh
@@ -39,7 +39,7 @@ struct hb_aat_feature_mapping_t
hb_aat_layout_feature_selector_t selectorToEnable;
hb_aat_layout_feature_selector_t selectorToDisable;
- static inline int cmp (const void *key_, const void *entry_)
+ static int cmp (const void *key_, const void *entry_)
{
hb_tag_t key = * (unsigned int *) key_;
const hb_aat_feature_mapping_t * entry = (const hb_aat_feature_mapping_t *) entry_;
@@ -56,9 +56,6 @@ HB_INTERNAL void
hb_aat_layout_compile_map (const hb_aat_map_builder_t *mapper,
hb_aat_map_t *map);
-HB_INTERNAL bool
-hb_aat_layout_has_substitution (hb_face_t *face);
-
HB_INTERNAL void
hb_aat_layout_substitute (const hb_ot_shape_plan_t *plan,
hb_font_t *font,
@@ -70,17 +67,11 @@ hb_aat_layout_zero_width_deleted_glyphs (hb_buffer_t *buffer);
HB_INTERNAL void
hb_aat_layout_remove_deleted_glyphs (hb_buffer_t *buffer);
-HB_INTERNAL bool
-hb_aat_layout_has_positioning (hb_face_t *face);
-
HB_INTERNAL void
hb_aat_layout_position (const hb_ot_shape_plan_t *plan,
hb_font_t *font,
hb_buffer_t *buffer);
-HB_INTERNAL bool
-hb_aat_layout_has_tracking (hb_face_t *face);
-
HB_INTERNAL void
hb_aat_layout_track (const hb_ot_shape_plan_t *plan,
hb_font_t *font,
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-ltag-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-ltag-table.hh
index 8a42b3510bf..3b00b55914e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-ltag-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-ltag-table.hh
@@ -43,7 +43,7 @@ struct FTStringRange
{
friend struct ltag;
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && (base+tag).sanitize (c, length));
@@ -60,16 +60,16 @@ struct FTStringRange
struct ltag
{
- static const hb_tag_t tableTag = HB_AAT_TAG_ltag;
+ enum { tableTag = HB_AAT_TAG_ltag };
- inline hb_language_t get_language (unsigned int i) const
+ hb_language_t get_language (unsigned int i) const
{
const FTStringRange &range = tagRanges[i];
return hb_language_from_string ((const char *) (this+range.tag).arrayZ,
range.length);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-map.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-map.hh
index b033e336872..fa312dbec39 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-map.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-map.hh
@@ -36,15 +36,12 @@ struct hb_aat_map_t
public:
- inline void init (void)
+ void init ()
{
memset (this, 0, sizeof (*this));
chain_flags.init ();
}
- inline void fini (void)
- {
- chain_flags.fini ();
- }
+ void fini () { chain_flags.fini (); }
public:
hb_vector_t<hb_mask_t, 1> chain_flags;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-array.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-array.hh
new file mode 100644
index 00000000000..d4df16546cd
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-array.hh
@@ -0,0 +1,274 @@
+/*
+ * 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_ARRAY_HH
+#define HB_ARRAY_HH
+
+#include "hb.hh"
+
+
+template <typename Type>
+struct hb_sorted_array_t;
+
+template <typename Type>
+struct hb_array_t
+{
+ typedef Type ItemType;
+ enum { item_size = hb_static_size (Type) };
+
+ /*
+ * Constructors.
+ */
+ hb_array_t () : arrayZ (nullptr), len (0) {}
+ hb_array_t (const hb_array_t &o) : arrayZ (o.arrayZ), len (o.len) {}
+ hb_array_t (Type *array_, unsigned int len_) : arrayZ (array_), len (len_) {}
+ template <unsigned int len_> hb_array_t (Type (&array_)[len_]) : arrayZ (array_), len (len_) {}
+
+ /*
+ * Operators.
+ */
+
+ Type& operator [] (int i_) const
+ {
+ unsigned int i = (unsigned int) i_;
+ if (unlikely (i >= len)) return CrapOrNull(Type);
+ return arrayZ[i];
+ }
+
+ explicit_operator bool () const { return len; }
+ Type * operator & () const { return arrayZ; }
+ Type & operator * () { return (this->operator [])[0]; }
+ operator hb_array_t<const Type> () { return hb_array_t<const Type> (arrayZ, len); }
+ template <typename T> operator T * () const { return arrayZ; }
+
+ hb_array_t<Type> & operator += (unsigned int count)
+ {
+ if (unlikely (count > len))
+ count = len;
+ len -= count;
+ arrayZ += count;
+ return *this;
+ }
+ hb_array_t<Type> & operator -= (unsigned int count)
+ {
+ if (unlikely (count > len))
+ count = len;
+ len -= count;
+ return *this;
+ }
+ hb_array_t<Type> & operator ++ () { *this += 1; }
+ hb_array_t<Type> & operator -- () { *this -= 1; }
+ hb_array_t<Type> operator + (unsigned int count)
+ { hb_array_t<Type> copy (*this); *this += count; return copy; }
+ hb_array_t<Type> operator - (unsigned int count)
+ { hb_array_t<Type> copy (*this); *this -= count; return copy; }
+ hb_array_t<Type> operator ++ (int)
+ { hb_array_t<Type> copy (*this); ++*this; return copy; }
+ hb_array_t<Type> operator -- (int)
+ { hb_array_t<Type> copy (*this); --*this; return copy; }
+
+ /*
+ * Compare, Sort, and Search.
+ */
+
+ /* Note: our compare is NOT lexicographic; it also does NOT call Type::cmp. */
+ int cmp (const hb_array_t<Type> &a) const
+ {
+ if (len != a.len)
+ return (int) a.len - (int) len;
+ return hb_memcmp (a.arrayZ, arrayZ, get_size ());
+ }
+ static int cmp (const void *pa, const void *pb)
+ {
+ hb_array_t<Type> *a = (hb_array_t<Type> *) pa;
+ hb_array_t<Type> *b = (hb_array_t<Type> *) pb;
+ return b->cmp (*a);
+ }
+
+ template <typename T>
+ Type *lsearch (const T &x, Type *not_found = nullptr)
+ {
+ unsigned int count = len;
+ for (unsigned int i = 0; i < count; i++)
+ if (!this->arrayZ[i].cmp (x))
+ return &this->arrayZ[i];
+ return not_found;
+ }
+ template <typename T>
+ const Type *lsearch (const T &x, const Type *not_found = nullptr) const
+ {
+ unsigned int count = len;
+ for (unsigned int i = 0; i < count; i++)
+ if (!this->arrayZ[i].cmp (x))
+ return &this->arrayZ[i];
+ return not_found;
+ }
+
+ hb_sorted_array_t<Type> qsort (int (*cmp_)(const void*, const void*))
+ {
+ ::qsort (arrayZ, len, item_size, cmp_);
+ return hb_sorted_array_t<Type> (*this);
+ }
+ hb_sorted_array_t<Type> qsort ()
+ {
+ ::qsort (arrayZ, len, item_size, Type::cmp);
+ return hb_sorted_array_t<Type> (*this);
+ }
+ void qsort (unsigned int start, unsigned int end)
+ {
+ end = MIN (end, len);
+ assert (start <= end);
+ ::qsort (arrayZ + start, end - start, item_size, Type::cmp);
+ }
+
+ /*
+ * Other methods.
+ */
+
+ unsigned int get_size () const { return len * item_size; }
+
+ hb_array_t<Type> sub_array (unsigned int start_offset = 0, unsigned int *seg_count = nullptr /* IN/OUT */) const
+ {
+ if (!start_offset && !seg_count)
+ return *this;
+
+ unsigned int count = len;
+ if (unlikely (start_offset > count))
+ count = 0;
+ else
+ count -= start_offset;
+ if (seg_count)
+ count = *seg_count = MIN (count, *seg_count);
+ return hb_array_t<Type> (arrayZ + start_offset, count);
+ }
+ hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int seg_count) const
+ { return sub_array (start_offset, &seg_count); }
+
+ /* Only call if you allocated the underlying array using malloc() or similar. */
+ void free ()
+ { ::free ((void *) arrayZ); arrayZ = nullptr; len = 0; }
+
+ template <typename hb_sanitize_context_t>
+ bool sanitize (hb_sanitize_context_t *c) const
+ { return c->check_array (arrayZ, len); }
+
+ /*
+ * Members
+ */
+
+ public:
+ Type *arrayZ;
+ unsigned int len;
+};
+template <typename T>
+inline hb_array_t<T> hb_array (T *array, unsigned int len)
+{ return hb_array_t<T> (array, len); }
+
+
+enum hb_bfind_not_found_t
+{
+ HB_BFIND_NOT_FOUND_DONT_STORE,
+ HB_BFIND_NOT_FOUND_STORE,
+ HB_BFIND_NOT_FOUND_STORE_CLOSEST,
+};
+
+template <typename Type>
+struct hb_sorted_array_t : hb_array_t<Type>
+{
+ hb_sorted_array_t () : hb_array_t<Type> () {}
+ hb_sorted_array_t (const hb_array_t<Type> &o) : hb_array_t<Type> (o) {}
+ hb_sorted_array_t (Type *array_, unsigned int len_) : hb_array_t<Type> (array_, len_) {}
+
+ hb_sorted_array_t<Type> sub_array (unsigned int start_offset, unsigned int *seg_count /* IN/OUT */) const
+ { return hb_sorted_array_t<Type> (((const hb_array_t<Type> *) (this))->sub_array (start_offset, seg_count)); }
+ hb_sorted_array_t<Type> sub_array (unsigned int start_offset, unsigned int seg_count) const
+ { return sub_array (start_offset, &seg_count); }
+
+ template <typename T>
+ Type *bsearch (const T &x, Type *not_found = nullptr)
+ {
+ unsigned int i;
+ return bfind (x, &i) ? &this->arrayZ[i] : not_found;
+ }
+ template <typename T>
+ const Type *bsearch (const T &x, const Type *not_found = nullptr) const
+ {
+ unsigned int i;
+ return bfind (x, &i) ? &this->arrayZ[i] : not_found;
+ }
+ template <typename T>
+ bool bfind (const T &x, unsigned int *i = nullptr,
+ hb_bfind_not_found_t not_found = HB_BFIND_NOT_FOUND_DONT_STORE,
+ unsigned int to_store = (unsigned int) -1) const
+ {
+ int min = 0, max = (int) this->len - 1;
+ const Type *array = this->arrayZ;
+ while (min <= max)
+ {
+ int mid = ((unsigned int) min + (unsigned int) max) / 2;
+ int c = array[mid].cmp (x);
+ if (c < 0)
+ max = mid - 1;
+ else if (c > 0)
+ min = mid + 1;
+ else
+ {
+ if (i)
+ *i = mid;
+ return true;
+ }
+ }
+ if (i)
+ {
+ switch (not_found)
+ {
+ case HB_BFIND_NOT_FOUND_DONT_STORE:
+ break;
+
+ case HB_BFIND_NOT_FOUND_STORE:
+ *i = to_store;
+ break;
+
+ case HB_BFIND_NOT_FOUND_STORE_CLOSEST:
+ if (max < 0 || (max < (int) this->len && array[max].cmp (x) > 0))
+ max++;
+ *i = max;
+ break;
+ }
+ }
+ return false;
+ }
+};
+template <typename T>
+inline hb_sorted_array_t<T> hb_sorted_array (T *array, unsigned int len)
+{ return hb_sorted_array_t<T> (array, len); }
+
+
+typedef hb_array_t<const char> hb_bytes_t;
+typedef hb_array_t<const unsigned char> hb_ubytes_t;
+
+
+#endif /* HB_ARRAY_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-atomic.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-atomic.hh
index 265de1267ac..9321932e06f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-atomic.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-atomic.hh
@@ -104,7 +104,7 @@ _hb_atomic_ptr_impl_cmplexch (const void **P, const void *O_, const void *N)
#include <windows.h>
-static inline void _hb_memory_barrier (void)
+static inline void _hb_memory_barrier ()
{
#if !defined(MemoryBarrier)
/* MinGW has a convoluted history of supporting MemoryBarrier. */
@@ -143,7 +143,7 @@ static_assert ((sizeof (LONG) == sizeof (int)), "");
static inline int _hb_fetch_and_add (int *AI, int V)
{
_hb_memory_w_barrier ();
- int result = atomic_add_int_nv ((uint_t *) AI, V);
+ int result = atomic_add_int_nv ((uint_t *) AI, V) - V;
_hb_memory_r_barrier ();
return result;
}
@@ -267,12 +267,12 @@ inline void *hb_atomic_ptr_impl_get (void ** const P) { void *v = *P; _hb_memory
#define HB_ATOMIC_INT_INIT(V) {V}
struct hb_atomic_int_t
{
- inline void set_relaxed (int v_) { hb_atomic_int_impl_set_relaxed (&v, v_); }
- inline void set (int v_) { hb_atomic_int_impl_set (&v, v_); }
- inline int get_relaxed (void) const { return hb_atomic_int_impl_get_relaxed (&v); }
- inline int get (void) const { return hb_atomic_int_impl_get (&v); }
- inline int inc (void) { return hb_atomic_int_impl_add (&v, 1); }
- inline int dec (void) { return hb_atomic_int_impl_add (&v, -1); }
+ void set_relaxed (int v_) { hb_atomic_int_impl_set_relaxed (&v, v_); }
+ void set (int v_) { hb_atomic_int_impl_set (&v, v_); }
+ int get_relaxed () const { return hb_atomic_int_impl_get_relaxed (&v); }
+ int get () const { return hb_atomic_int_impl_get (&v); }
+ int inc () { return hb_atomic_int_impl_add (&v, 1); }
+ int dec () { return hb_atomic_int_impl_add (&v, -1); }
int v;
};
@@ -284,14 +284,14 @@ struct hb_atomic_ptr_t
{
typedef typename hb_remove_pointer (P) T;
- inline void init (T* v_ = nullptr) { set_relaxed (v_); }
- inline void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
- inline T *get_relaxed (void) const { return (T *) hb_atomic_ptr_impl_get_relaxed (&v); }
- inline T *get (void) const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
- inline bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
+ void init (T* v_ = nullptr) { set_relaxed (v_); }
+ void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
+ T *get_relaxed () const { return (T *) hb_atomic_ptr_impl_get_relaxed (&v); }
+ T *get () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
+ bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
- inline T * operator -> (void) const { return get (); }
- template <typename C> inline operator C * (void) const { return get (); }
+ T * operator -> () const { return get (); }
+ template <typename C> operator C * () const { return get (); }
T *v;
};
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 8ebedca7887..b53b20bd147 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc
@@ -188,7 +188,7 @@ hb_blob_copy_writable_or_fail (hb_blob_t *blob)
* Since: 0.9.2
**/
hb_blob_t *
-hb_blob_get_empty (void)
+hb_blob_get_empty ()
{
return const_cast<hb_blob_t *> (&Null(hb_blob_t));
}
@@ -378,7 +378,7 @@ hb_blob_get_data_writable (hb_blob_t *blob, unsigned int *length)
bool
-hb_blob_t::try_make_writable_inplace_unix (void)
+hb_blob_t::try_make_writable_inplace_unix ()
{
#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MPROTECT)
uintptr_t pagesize = -1, mask, length;
@@ -421,7 +421,7 @@ hb_blob_t::try_make_writable_inplace_unix (void)
}
bool
-hb_blob_t::try_make_writable_inplace (void)
+hb_blob_t::try_make_writable_inplace ()
{
DEBUG_MSG_FUNC (BLOB, this, "making writable inplace\n");
@@ -436,7 +436,7 @@ hb_blob_t::try_make_writable_inplace (void)
}
bool
-hb_blob_t::try_make_writable (void)
+hb_blob_t::try_make_writable ()
{
if (hb_object_is_immutable (this))
return false;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.hh
index bf2132bda99..4ea13f81370 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.hh
@@ -38,12 +38,9 @@
struct hb_blob_t
{
- inline void fini_shallow (void)
- {
- destroy_user_data ();
- }
+ void fini_shallow () { destroy_user_data (); }
- inline void destroy_user_data (void)
+ void destroy_user_data ()
{
if (destroy)
{
@@ -53,19 +50,17 @@ struct hb_blob_t
}
}
- HB_INTERNAL bool try_make_writable (void);
- HB_INTERNAL bool try_make_writable_inplace (void);
- HB_INTERNAL bool try_make_writable_inplace_unix (void);
+ HB_INTERNAL bool try_make_writable ();
+ HB_INTERNAL bool try_make_writable_inplace ();
+ HB_INTERNAL bool try_make_writable_inplace_unix ();
template <typename Type>
- inline const Type* as (void) const
+ const Type* as () const
{
return length < hb_null_size (Type) ? &Null(Type) : reinterpret_cast<const Type *> (data);
}
- inline hb_bytes_t as_bytes (void) const
- {
- return hb_bytes_t (data, length);
- }
+ hb_bytes_t as_bytes () const
+ { return hb_bytes_t (data, length); }
public:
hb_object_header_t header;
@@ -88,16 +83,16 @@ struct hb_blob_ptr_t
{
typedef typename hb_remove_pointer (P) T;
- inline hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
- inline hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
- inline const T * operator -> (void) const { return get (); }
- inline const T & operator * (void) const { return *get (); }
- template <typename C> inline operator const C * (void) const { return get (); }
- inline operator const char * (void) const { return (const char *) get (); }
- inline const T * get (void) const { return b->as<T> (); }
- inline hb_blob_t * get_blob (void) const { return b.get_raw (); }
- inline unsigned int get_length (void) const { return b.get ()->length; }
- inline void destroy (void) { hb_blob_destroy (b.get ()); b = nullptr; }
+ hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
+ hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
+ const T * operator -> () const { return get (); }
+ const T & operator * () const { return *get (); }
+ template <typename C> operator const C * () const { return get (); }
+ operator const char * () const { return (const char *) get (); }
+ const T * get () const { return b->as<T> (); }
+ hb_blob_t * get_blob () const { return b.get_raw (); }
+ unsigned int get_length () const { return b.get ()->length; }
+ void destroy () { hb_blob_destroy (b.get ()); b = nullptr; }
hb_nonnull_ptr_t<hb_blob_t> b;
};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-serialize.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-serialize.cc
index 1bd603d4474..6e265e84c6c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-serialize.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-serialize.cc
@@ -44,7 +44,7 @@ static const char *serialize_formats[] = {
* Since: 0.9.7
**/
const char **
-hb_buffer_serialize_list_formats (void)
+hb_buffer_serialize_list_formats ()
{
return serialize_formats;
}
@@ -246,7 +246,7 @@ _hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
if (flags & HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS)
{
- if (info[i].mask &HB_GLYPH_FLAG_DEFINED)
+ if (info[i].mask & HB_GLYPH_FLAG_DEFINED)
p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "#%X", info[i].mask &HB_GLYPH_FLAG_DEFINED));
}
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 1a5547b35f3..2dc02e9d657 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc
@@ -215,7 +215,7 @@ hb_buffer_t::get_scratch_buffer (unsigned int *size)
/* HarfBuzz-Internal API */
void
-hb_buffer_t::reset (void)
+hb_buffer_t::reset ()
{
if (unlikely (hb_object_is_immutable (this)))
return;
@@ -230,7 +230,7 @@ hb_buffer_t::reset (void)
}
void
-hb_buffer_t::clear (void)
+hb_buffer_t::clear ()
{
if (unlikely (hb_object_is_immutable (this)))
return;
@@ -287,7 +287,7 @@ hb_buffer_t::add_info (const hb_glyph_info_t &glyph_info)
void
-hb_buffer_t::remove_output (void)
+hb_buffer_t::remove_output ()
{
if (unlikely (hb_object_is_immutable (this)))
return;
@@ -300,7 +300,7 @@ hb_buffer_t::remove_output (void)
}
void
-hb_buffer_t::clear_output (void)
+hb_buffer_t::clear_output ()
{
if (unlikely (hb_object_is_immutable (this)))
return;
@@ -313,7 +313,7 @@ hb_buffer_t::clear_output (void)
}
void
-hb_buffer_t::clear_positions (void)
+hb_buffer_t::clear_positions ()
{
if (unlikely (hb_object_is_immutable (this)))
return;
@@ -328,7 +328,7 @@ hb_buffer_t::clear_positions (void)
}
void
-hb_buffer_t::swap_buffers (void)
+hb_buffer_t::swap_buffers ()
{
if (unlikely (!successful)) return;
@@ -480,7 +480,7 @@ hb_buffer_t::reverse_range (unsigned int start,
}
void
-hb_buffer_t::reverse (void)
+hb_buffer_t::reverse ()
{
if (unlikely (!len))
return;
@@ -489,7 +489,7 @@ hb_buffer_t::reverse (void)
}
void
-hb_buffer_t::reverse_clusters (void)
+hb_buffer_t::reverse_clusters ()
{
unsigned int i, start, count, last_cluster;
@@ -636,7 +636,7 @@ hb_buffer_t::unsafe_to_break_from_outbuffer (unsigned int start, unsigned int en
}
void
-hb_buffer_t::guess_segment_properties (void)
+hb_buffer_t::guess_segment_properties ()
{
assert (content_type == HB_BUFFER_CONTENT_TYPE_UNICODE ||
(!len && content_type == HB_BUFFER_CONTENT_TYPE_INVALID));
@@ -709,7 +709,7 @@ DEFINE_NULL_INSTANCE (hb_buffer_t) =
* Since: 0.9.2
**/
hb_buffer_t *
-hb_buffer_create (void)
+hb_buffer_create ()
{
hb_buffer_t *buffer;
@@ -727,14 +727,14 @@ hb_buffer_create (void)
/**
* hb_buffer_get_empty:
*
- *
+ *
*
* Return value: (transfer full):
*
* Since: 0.9.2
**/
hb_buffer_t *
-hb_buffer_get_empty (void)
+hb_buffer_get_empty ()
{
return const_cast<hb_buffer_t *> (&Null(hb_buffer_t));
}
@@ -785,14 +785,14 @@ hb_buffer_destroy (hb_buffer_t *buffer)
/**
* hb_buffer_set_user_data: (skip)
* @buffer: an #hb_buffer_t.
- * @key:
- * @data:
- * @destroy:
- * @replace:
+ * @key:
+ * @data:
+ * @destroy:
+ * @replace:
*
- *
*
- * Return value:
+ *
+ * Return value:
*
* Since: 0.9.2
**/
@@ -809,11 +809,11 @@ hb_buffer_set_user_data (hb_buffer_t *buffer,
/**
* hb_buffer_get_user_data: (skip)
* @buffer: an #hb_buffer_t.
- * @key:
+ * @key:
*
- *
*
- * Return value:
+ *
+ * Return value:
*
* Since: 0.9.2
**/
@@ -863,9 +863,9 @@ hb_buffer_get_content_type (hb_buffer_t *buffer)
/**
* hb_buffer_set_unicode_funcs:
* @buffer: an #hb_buffer_t.
- * @unicode_funcs:
+ * @unicode_funcs:
+ *
*
- *
*
* Since: 0.9.2
**/
@@ -888,9 +888,9 @@ hb_buffer_set_unicode_funcs (hb_buffer_t *buffer,
* hb_buffer_get_unicode_funcs:
* @buffer: an #hb_buffer_t.
*
- *
*
- * Return value:
+ *
+ * Return value:
*
* Since: 0.9.2
**/
@@ -1094,7 +1094,7 @@ hb_buffer_set_flags (hb_buffer_t *buffer,
*
* See hb_buffer_set_flags().
*
- * Return value:
+ * Return value:
* The @buffer flags.
*
* Since: 0.9.7
@@ -1108,9 +1108,9 @@ hb_buffer_get_flags (hb_buffer_t *buffer)
/**
* hb_buffer_set_cluster_level:
* @buffer: an #hb_buffer_t.
- * @cluster_level:
+ * @cluster_level:
+ *
*
- *
*
* Since: 0.9.42
**/
@@ -1128,9 +1128,9 @@ hb_buffer_set_cluster_level (hb_buffer_t *buffer,
* hb_buffer_get_cluster_level:
* @buffer: an #hb_buffer_t.
*
- *
*
- * Return value:
+ *
+ * Return value:
*
* Since: 0.9.42
**/
@@ -1169,7 +1169,7 @@ hb_buffer_set_replacement_codepoint (hb_buffer_t *buffer,
*
* See hb_buffer_set_replacement_codepoint().
*
- * Return value:
+ * Return value:
* The @buffer replacement #hb_codepoint_t.
*
* Since: 0.9.31
@@ -1209,7 +1209,7 @@ hb_buffer_set_invisible_glyph (hb_buffer_t *buffer,
*
* See hb_buffer_set_invisible_glyph().
*
- * Return value:
+ * Return value:
* The @buffer invisible #hb_codepoint_t.
*
* Since: 2.0.0
@@ -1320,7 +1320,7 @@ hb_buffer_add (hb_buffer_t *buffer,
* Similar to hb_buffer_pre_allocate(), but clears any new items added at the
* end.
*
- * Return value:
+ * Return value:
* %true if @buffer memory allocation succeeded, %false otherwise.
*
* Since: 0.9.2
@@ -2000,7 +2000,7 @@ hb_buffer_diff (hb_buffer_t *buffer,
* @user_data:
* @destroy:
*
- *
+ *
*
* Since: 1.1.3
**/
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh
index 37adeb083bf..8a3170ca9a5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh
@@ -137,7 +137,9 @@ struct hb_buffer_t
/* Methods */
- inline void allocate_var (unsigned int start, unsigned int count)
+ bool in_error () const { return !successful; }
+
+ void allocate_var (unsigned int start, unsigned int count)
{
#ifndef HB_NDEBUG
unsigned int end = start + count;
@@ -147,7 +149,7 @@ struct hb_buffer_t
allocated_var_bits |= bits;
#endif
}
- inline void deallocate_var (unsigned int start, unsigned int count)
+ void deallocate_var (unsigned int start, unsigned int count)
{
#ifndef HB_NDEBUG
unsigned int end = start + count;
@@ -157,7 +159,7 @@ struct hb_buffer_t
allocated_var_bits &= ~bits;
#endif
}
- inline void assert_var (unsigned int start, unsigned int count)
+ void assert_var (unsigned int start, unsigned int count)
{
#ifndef HB_NDEBUG
unsigned int end = start + count;
@@ -166,53 +168,51 @@ struct hb_buffer_t
assert (bits == (allocated_var_bits & bits));
#endif
}
- inline void deallocate_var_all (void)
+ void deallocate_var_all ()
{
#ifndef HB_NDEBUG
allocated_var_bits = 0;
#endif
}
- inline hb_glyph_info_t &cur (unsigned int i = 0) { return info[idx + i]; }
- inline hb_glyph_info_t cur (unsigned int i = 0) const { return info[idx + i]; }
+ hb_glyph_info_t &cur (unsigned int i = 0) { return info[idx + i]; }
+ hb_glyph_info_t cur (unsigned int i = 0) const { return info[idx + i]; }
- inline hb_glyph_position_t &cur_pos (unsigned int i = 0) { return pos[idx + i]; }
- inline hb_glyph_position_t cur_pos (unsigned int i = 0) const { return pos[idx + i]; }
+ hb_glyph_position_t &cur_pos (unsigned int i = 0) { return pos[idx + i]; }
+ hb_glyph_position_t cur_pos (unsigned int i = 0) const { return pos[idx + i]; }
- inline hb_glyph_info_t &prev (void) { return out_info[out_len ? out_len - 1 : 0]; }
- inline hb_glyph_info_t prev (void) const { return out_info[out_len ? out_len - 1 : 0]; }
+ hb_glyph_info_t &prev () { return out_info[out_len ? out_len - 1 : 0]; }
+ hb_glyph_info_t prev () const { return out_info[out_len ? out_len - 1 : 0]; }
- inline bool has_separate_output (void) const { return info != out_info; }
+ bool has_separate_output () const { return info != out_info; }
- HB_INTERNAL void reset (void);
- HB_INTERNAL void clear (void);
+ HB_INTERNAL void reset ();
+ HB_INTERNAL void clear ();
- inline unsigned int backtrack_len (void) const
- { return have_output? out_len : idx; }
- inline unsigned int lookahead_len (void) const
- { return len - idx; }
- inline unsigned int next_serial (void) { return serial++; }
+ unsigned int backtrack_len () const { return have_output? out_len : idx; }
+ unsigned int lookahead_len () const { return len - idx; }
+ unsigned int next_serial () { return serial++; }
HB_INTERNAL void add (hb_codepoint_t codepoint,
unsigned int cluster);
HB_INTERNAL void add_info (const hb_glyph_info_t &glyph_info);
HB_INTERNAL void reverse_range (unsigned int start, unsigned int end);
- HB_INTERNAL void reverse (void);
- HB_INTERNAL void reverse_clusters (void);
- HB_INTERNAL void guess_segment_properties (void);
+ HB_INTERNAL void reverse ();
+ HB_INTERNAL void reverse_clusters ();
+ HB_INTERNAL void guess_segment_properties ();
- HB_INTERNAL void swap_buffers (void);
- HB_INTERNAL void remove_output (void);
- HB_INTERNAL void clear_output (void);
- HB_INTERNAL void clear_positions (void);
+ HB_INTERNAL void swap_buffers ();
+ HB_INTERNAL void remove_output ();
+ HB_INTERNAL void clear_output ();
+ HB_INTERNAL void clear_positions ();
HB_INTERNAL void replace_glyphs (unsigned int num_in,
unsigned int num_out,
const hb_codepoint_t *glyph_data);
- inline void replace_glyph (hb_codepoint_t glyph_index)
+ void replace_glyph (hb_codepoint_t glyph_index)
{
if (unlikely (out_info != info || out_len != idx)) {
if (unlikely (!make_room_for (1, 1))) return;
@@ -224,7 +224,7 @@ struct hb_buffer_t
out_len++;
}
/* Makes a copy of the glyph at idx to output and replace glyph_index */
- inline hb_glyph_info_t & output_glyph (hb_codepoint_t glyph_index)
+ hb_glyph_info_t & output_glyph (hb_codepoint_t glyph_index)
{
if (unlikely (!make_room_for (0, 1))) return Crap(hb_glyph_info_t);
@@ -238,7 +238,7 @@ struct hb_buffer_t
return out_info[out_len - 1];
}
- inline void output_info (const hb_glyph_info_t &glyph_info)
+ void output_info (const hb_glyph_info_t &glyph_info)
{
if (unlikely (!make_room_for (0, 1))) return;
@@ -247,7 +247,7 @@ struct hb_buffer_t
out_len++;
}
/* Copies glyph at idx to output but doesn't advance idx */
- inline void copy_glyph (void)
+ void copy_glyph ()
{
if (unlikely (!make_room_for (0, 1))) return;
@@ -257,8 +257,8 @@ struct hb_buffer_t
}
/* Copies glyph at idx to output and advance idx.
* If there's no output, just advance idx. */
- inline void
- next_glyph (void)
+ void
+ next_glyph ()
{
if (have_output)
{
@@ -274,7 +274,7 @@ struct hb_buffer_t
}
/* Copies n glyphs at idx to output and advance idx.
* If there's no output, just advance idx. */
- inline void
+ void
next_glyphs (unsigned int n)
{
if (have_output)
@@ -290,16 +290,13 @@ struct hb_buffer_t
idx += n;
}
/* Advance idx without copying to output. */
- inline void skip_glyph (void)
- {
- idx++;
- }
- inline void reset_masks (hb_mask_t mask)
+ void skip_glyph () { idx++; }
+ void reset_masks (hb_mask_t mask)
{
for (unsigned int j = 0; j < len; j++)
info[j].mask = mask;
}
- inline void add_masks (hb_mask_t mask)
+ void add_masks (hb_mask_t mask)
{
for (unsigned int j = 0; j < len; j++)
info[j].mask |= mask;
@@ -307,7 +304,7 @@ struct hb_buffer_t
HB_INTERNAL void set_masks (hb_mask_t value, hb_mask_t mask,
unsigned int cluster_start, unsigned int cluster_end);
- inline void merge_clusters (unsigned int start, unsigned int end)
+ void merge_clusters (unsigned int start, unsigned int end)
{
if (end - start < 2)
return;
@@ -316,9 +313,9 @@ struct hb_buffer_t
HB_INTERNAL void merge_clusters_impl (unsigned int start, unsigned int end);
HB_INTERNAL void merge_out_clusters (unsigned int start, unsigned int end);
/* Merge clusters for deleting current glyph, and skip it. */
- HB_INTERNAL void delete_glyph (void);
+ HB_INTERNAL void delete_glyph ();
- inline void unsafe_to_break (unsigned int start,
+ void unsafe_to_break (unsigned int start,
unsigned int end)
{
if (end - start < 2)
@@ -334,10 +331,10 @@ struct hb_buffer_t
HB_INTERNAL bool enlarge (unsigned int size);
- inline bool ensure (unsigned int size)
+ bool ensure (unsigned int size)
{ return likely (!size || size < allocated) ? true : enlarge (size); }
- inline bool ensure_inplace (unsigned int size)
+ bool ensure_inplace (unsigned int size)
{ return likely (!size || size < allocated); }
HB_INTERNAL bool make_room_for (unsigned int num_in, unsigned int num_out);
@@ -346,12 +343,12 @@ struct hb_buffer_t
typedef long scratch_buffer_t;
HB_INTERNAL scratch_buffer_t *get_scratch_buffer (unsigned int *size);
- inline void clear_context (unsigned int side) { context_len[side] = 0; }
+ void clear_context (unsigned int side) { context_len[side] = 0; }
HB_INTERNAL void sort (unsigned int start, unsigned int end, int(*compar)(const hb_glyph_info_t *, const hb_glyph_info_t *));
- inline bool messaging (void) { return unlikely (message_func); }
- inline bool message (hb_font_t *font, const char *fmt, ...) HB_PRINTF_FUNC(3, 4)
+ bool messaging () { return unlikely (message_func); }
+ bool message (hb_font_t *font, const char *fmt, ...) HB_PRINTF_FUNC(3, 4)
{
if (!messaging ())
return true;
@@ -363,7 +360,7 @@ struct hb_buffer_t
}
HB_INTERNAL bool message_impl (hb_font_t *font, const char *fmt, va_list ap) HB_PRINTF_FUNC(3, 0);
- static inline void
+ static void
set_cluster (hb_glyph_info_t &inf, unsigned int cluster, unsigned int mask = 0)
{
if (inf.cluster != cluster)
@@ -376,7 +373,7 @@ struct hb_buffer_t
inf.cluster = cluster;
}
- inline int
+ int
_unsafe_to_break_find_min_cluster (const hb_glyph_info_t *infos,
unsigned int start, unsigned int end,
unsigned int cluster) const
@@ -385,7 +382,7 @@ struct hb_buffer_t
cluster = MIN<unsigned int> (cluster, infos[i].cluster);
return cluster;
}
- inline void
+ void
_unsafe_to_break_set_mask (hb_glyph_info_t *infos,
unsigned int start, unsigned int end,
unsigned int cluster)
@@ -398,13 +395,9 @@ struct hb_buffer_t
}
}
- inline void
- unsafe_to_break_all (void)
- {
- unsafe_to_break_impl (0, len);
- }
- inline void
- safe_to_break_all (void)
+ void unsafe_to_break_all ()
+ { unsafe_to_break_impl (0, len); }
+ void safe_to_break_all ()
{
for (unsigned int i = 0; i < len; i++)
info[i].mask &= ~HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cache.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cache.hh
index eb48f18cf94..bf26d96be46 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cache.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cache.hh
@@ -39,16 +39,16 @@ struct hb_cache_t
static_assert ((key_bits + value_bits - cache_bits <= 8 * sizeof (hb_atomic_int_t)), "");
static_assert (sizeof (hb_atomic_int_t) == sizeof (unsigned int), "");
- inline void init (void) { clear (); }
- inline void fini (void) {}
+ void init () { clear (); }
+ void fini () {}
- inline void clear (void)
+ void clear ()
{
for (unsigned i = 0; i < ARRAY_LENGTH (values); i++)
values[i].set_relaxed (-1);
}
- inline bool get (unsigned int key, unsigned int *value) const
+ bool get (unsigned int key, unsigned int *value) const
{
unsigned int k = key & ((1u<<cache_bits)-1);
unsigned int v = values[k].get_relaxed ();
@@ -59,7 +59,7 @@ struct hb_cache_t
return true;
}
- inline bool set (unsigned int key, unsigned int value)
+ bool set (unsigned int key, unsigned int value)
{
if (unlikely ((key >> key_bits) || (value >> value_bits)))
return false; /* Overflows */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff-interp-common.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff-interp-common.hh
new file mode 100644
index 00000000000..c2be034a1ce
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff-interp-common.hh
@@ -0,0 +1,744 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+#ifndef HB_CFF_INTERP_COMMON_HH
+#define HB_CFF_INTERP_COMMON_HH
+
+namespace CFF {
+
+using namespace OT;
+
+typedef unsigned int OpCode;
+
+
+/* === Dict operators === */
+
+/* One byte operators (0-31) */
+#define OpCode_version 0 /* CFF Top */
+#define OpCode_Notice 1 /* CFF Top */
+#define OpCode_FullName 2 /* CFF Top */
+#define OpCode_FamilyName 3 /* CFF Top */
+#define OpCode_Weight 4 /* CFF Top */
+#define OpCode_FontBBox 5 /* CFF Top */
+#define OpCode_BlueValues 6 /* CFF Private, CFF2 Private */
+#define OpCode_OtherBlues 7 /* CFF Private, CFF2 Private */
+#define OpCode_FamilyBlues 8 /* CFF Private, CFF2 Private */
+#define OpCode_FamilyOtherBlues 9 /* CFF Private, CFF2 Private */
+#define OpCode_StdHW 10 /* CFF Private, CFF2 Private */
+#define OpCode_StdVW 11 /* CFF Private, CFF2 Private */
+#define OpCode_escape 12 /* All. Shared with CS */
+#define OpCode_UniqueID 13 /* CFF Top */
+#define OpCode_XUID 14 /* CFF Top */
+#define OpCode_charset 15 /* CFF Top (0) */
+#define OpCode_Encoding 16 /* CFF Top (0) */
+#define OpCode_CharStrings 17 /* CFF Top, CFF2 Top */
+#define OpCode_Private 18 /* CFF Top, CFF2 FD */
+#define OpCode_Subrs 19 /* CFF Private, CFF2 Private */
+#define OpCode_defaultWidthX 20 /* CFF Private (0) */
+#define OpCode_nominalWidthX 21 /* CFF Private (0) */
+#define OpCode_vsindexdict 22 /* CFF2 Private/CS */
+#define OpCode_blenddict 23 /* CFF2 Private/CS */
+#define OpCode_vstore 24 /* CFF2 Top */
+#define OpCode_reserved25 25
+#define OpCode_reserved26 26
+#define OpCode_reserved27 27
+
+/* Numbers */
+#define OpCode_shortint 28 /* 16-bit integer, All */
+#define OpCode_longintdict 29 /* 32-bit integer, All */
+#define OpCode_BCD 30 /* Real number, CFF2 Top/FD */
+#define OpCode_reserved31 31
+
+/* 1-byte integers */
+#define OpCode_OneByteIntFirst 32 /* All. beginning of the range of first byte ints */
+#define OpCode_OneByteIntLast 246 /* All. ending of the range of first byte int */
+
+/* 2-byte integers */
+#define OpCode_TwoBytePosInt0 247 /* All. first byte of two byte positive int (+108 to +1131) */
+#define OpCode_TwoBytePosInt1 248
+#define OpCode_TwoBytePosInt2 249
+#define OpCode_TwoBytePosInt3 250
+
+#define OpCode_TwoByteNegInt0 251 /* All. first byte of two byte negative int (-1131 to -108) */
+#define OpCode_TwoByteNegInt1 252
+#define OpCode_TwoByteNegInt2 253
+#define OpCode_TwoByteNegInt3 254
+
+/* Two byte escape operators 12, (0-41) */
+#define OpCode_ESC_Base 256
+#define Make_OpCode_ESC(byte2) ((OpCode)(OpCode_ESC_Base + (byte2)))
+
+inline OpCode Unmake_OpCode_ESC (OpCode op) { return (OpCode)(op - OpCode_ESC_Base); }
+inline bool Is_OpCode_ESC (OpCode op) { return op >= OpCode_ESC_Base; }
+inline unsigned int OpCode_Size (OpCode op) { return Is_OpCode_ESC (op) ? 2: 1; }
+
+#define OpCode_Copyright Make_OpCode_ESC(0) /* CFF Top */
+#define OpCode_isFixedPitch Make_OpCode_ESC(1) /* CFF Top (false) */
+#define OpCode_ItalicAngle Make_OpCode_ESC(2) /* CFF Top (0) */
+#define OpCode_UnderlinePosition Make_OpCode_ESC(3) /* CFF Top (-100) */
+#define OpCode_UnderlineThickness Make_OpCode_ESC(4) /* CFF Top (50) */
+#define OpCode_PaintType Make_OpCode_ESC(5) /* CFF Top (0) */
+#define OpCode_CharstringType Make_OpCode_ESC(6) /* CFF Top (2) */
+#define OpCode_FontMatrix Make_OpCode_ESC(7) /* CFF Top, CFF2 Top (.001 0 0 .001 0 0)*/
+#define OpCode_StrokeWidth Make_OpCode_ESC(8) /* CFF Top (0) */
+#define OpCode_BlueScale Make_OpCode_ESC(9) /* CFF Private, CFF2 Private (0.039625) */
+#define OpCode_BlueShift Make_OpCode_ESC(10) /* CFF Private, CFF2 Private (7) */
+#define OpCode_BlueFuzz Make_OpCode_ESC(11) /* CFF Private, CFF2 Private (1) */
+#define OpCode_StemSnapH Make_OpCode_ESC(12) /* CFF Private, CFF2 Private */
+#define OpCode_StemSnapV Make_OpCode_ESC(13) /* CFF Private, CFF2 Private */
+#define OpCode_ForceBold Make_OpCode_ESC(14) /* CFF Private (false) */
+#define OpCode_reservedESC15 Make_OpCode_ESC(15)
+#define OpCode_reservedESC16 Make_OpCode_ESC(16)
+#define OpCode_LanguageGroup Make_OpCode_ESC(17) /* CFF Private, CFF2 Private (0) */
+#define OpCode_ExpansionFactor Make_OpCode_ESC(18) /* CFF Private, CFF2 Private (0.06) */
+#define OpCode_initialRandomSeed Make_OpCode_ESC(19) /* CFF Private (0) */
+#define OpCode_SyntheticBase Make_OpCode_ESC(20) /* CFF Top */
+#define OpCode_PostScript Make_OpCode_ESC(21) /* CFF Top */
+#define OpCode_BaseFontName Make_OpCode_ESC(22) /* CFF Top */
+#define OpCode_BaseFontBlend Make_OpCode_ESC(23) /* CFF Top */
+#define OpCode_reservedESC24 Make_OpCode_ESC(24)
+#define OpCode_reservedESC25 Make_OpCode_ESC(25)
+#define OpCode_reservedESC26 Make_OpCode_ESC(26)
+#define OpCode_reservedESC27 Make_OpCode_ESC(27)
+#define OpCode_reservedESC28 Make_OpCode_ESC(28)
+#define OpCode_reservedESC29 Make_OpCode_ESC(29)
+#define OpCode_ROS Make_OpCode_ESC(30) /* CFF Top_CID */
+#define OpCode_CIDFontVersion Make_OpCode_ESC(31) /* CFF Top_CID (0) */
+#define OpCode_CIDFontRevision Make_OpCode_ESC(32) /* CFF Top_CID (0) */
+#define OpCode_CIDFontType Make_OpCode_ESC(33) /* CFF Top_CID (0) */
+#define OpCode_CIDCount Make_OpCode_ESC(34) /* CFF Top_CID (8720) */
+#define OpCode_UIDBase Make_OpCode_ESC(35) /* CFF Top_CID */
+#define OpCode_FDArray Make_OpCode_ESC(36) /* CFF Top_CID, CFF2 Top */
+#define OpCode_FDSelect Make_OpCode_ESC(37) /* CFF Top_CID, CFF2 Top */
+#define OpCode_FontName Make_OpCode_ESC(38) /* CFF Top_CID */
+
+
+/* === CharString operators === */
+
+#define OpCode_hstem 1 /* CFF, CFF2 */
+#define OpCode_Reserved2 2
+#define OpCode_vstem 3 /* CFF, CFF2 */
+#define OpCode_vmoveto 4 /* CFF, CFF2 */
+#define OpCode_rlineto 5 /* CFF, CFF2 */
+#define OpCode_hlineto 6 /* CFF, CFF2 */
+#define OpCode_vlineto 7 /* CFF, CFF2 */
+#define OpCode_rrcurveto 8 /* CFF, CFF2 */
+#define OpCode_Reserved9 9
+#define OpCode_callsubr 10 /* CFF, CFF2 */
+#define OpCode_return 11 /* CFF */
+//#define OpCode_escape 12 /* CFF, CFF2 */
+#define OpCode_Reserved13 13
+#define OpCode_endchar 14 /* CFF */
+#define OpCode_vsindexcs 15 /* CFF2 */
+#define OpCode_blendcs 16 /* CFF2 */
+#define OpCode_Reserved17 17
+#define OpCode_hstemhm 18 /* CFF, CFF2 */
+#define OpCode_hintmask 19 /* CFF, CFF2 */
+#define OpCode_cntrmask 20 /* CFF, CFF2 */
+#define OpCode_rmoveto 21 /* CFF, CFF2 */
+#define OpCode_hmoveto 22 /* CFF, CFF2 */
+#define OpCode_vstemhm 23 /* CFF, CFF2 */
+#define OpCode_rcurveline 24 /* CFF, CFF2 */
+#define OpCode_rlinecurve 25 /* CFF, CFF2 */
+#define OpCode_vvcurveto 26 /* CFF, CFF2 */
+#define OpCode_hhcurveto 27 /* CFF, CFF2 */
+//#define OpCode_shortint 28 /* CFF, CFF2 */
+#define OpCode_callgsubr 29 /* CFF, CFF2 */
+#define OpCode_vhcurveto 30 /* CFF, CFF2 */
+#define OpCode_hvcurveto 31 /* CFF, CFF2 */
+
+#define OpCode_fixedcs 255 /* 32-bit fixed */
+
+/* Two byte escape operators 12, (0-41) */
+#define OpCode_dotsection Make_OpCode_ESC(0) /* CFF (obsoleted) */
+#define OpCode_ReservedESC1 Make_OpCode_ESC(1)
+#define OpCode_ReservedESC2 Make_OpCode_ESC(2)
+#define OpCode_and Make_OpCode_ESC(3) /* CFF */
+#define OpCode_or Make_OpCode_ESC(4) /* CFF */
+#define OpCode_not Make_OpCode_ESC(5) /* CFF */
+#define OpCode_ReservedESC6 Make_OpCode_ESC(6)
+#define OpCode_ReservedESC7 Make_OpCode_ESC(7)
+#define OpCode_ReservedESC8 Make_OpCode_ESC(8)
+#define OpCode_abs Make_OpCode_ESC(9) /* CFF */
+#define OpCode_add Make_OpCode_ESC(10) /* CFF */
+#define OpCode_sub Make_OpCode_ESC(11) /* CFF */
+#define OpCode_div Make_OpCode_ESC(12) /* CFF */
+#define OpCode_ReservedESC13 Make_OpCode_ESC(13)
+#define OpCode_neg Make_OpCode_ESC(14) /* CFF */
+#define OpCode_eq Make_OpCode_ESC(15) /* CFF */
+#define OpCode_ReservedESC16 Make_OpCode_ESC(16)
+#define OpCode_ReservedESC17 Make_OpCode_ESC(17)
+#define OpCode_drop Make_OpCode_ESC(18) /* CFF */
+#define OpCode_ReservedESC19 Make_OpCode_ESC(19)
+#define OpCode_put Make_OpCode_ESC(20) /* CFF */
+#define OpCode_get Make_OpCode_ESC(21) /* CFF */
+#define OpCode_ifelse Make_OpCode_ESC(22) /* CFF */
+#define OpCode_random Make_OpCode_ESC(23) /* CFF */
+#define OpCode_mul Make_OpCode_ESC(24) /* CFF */
+//#define OpCode_reservedESC25 Make_OpCode_ESC(25)
+#define OpCode_sqrt Make_OpCode_ESC(26) /* CFF */
+#define OpCode_dup Make_OpCode_ESC(27) /* CFF */
+#define OpCode_exch Make_OpCode_ESC(28) /* CFF */
+#define OpCode_index Make_OpCode_ESC(29) /* CFF */
+#define OpCode_roll Make_OpCode_ESC(30) /* CFF */
+#define OpCode_reservedESC31 Make_OpCode_ESC(31)
+#define OpCode_reservedESC32 Make_OpCode_ESC(32)
+#define OpCode_reservedESC33 Make_OpCode_ESC(33)
+#define OpCode_hflex Make_OpCode_ESC(34) /* CFF, CFF2 */
+#define OpCode_flex Make_OpCode_ESC(35) /* CFF, CFF2 */
+#define OpCode_hflex1 Make_OpCode_ESC(36) /* CFF, CFF2 */
+#define OpCode_flex1 Make_OpCode_ESC(37) /* CFF, CFF2 */
+
+
+#define OpCode_Invalid 0xFFFFu
+
+
+struct Number
+{
+ void init () { set_real (0.0); }
+ void fini () {}
+
+ void set_int (int v) { value = (double) v; }
+ int to_int () const { return (int) value; }
+
+ void set_fixed (int32_t v) { value = v / 65536.0; }
+ int32_t to_fixed () const { return (int32_t) (value * 65536.0); }
+
+ void set_real (double v) { value = v; }
+ double to_real () const { return value; }
+
+ int ceil () const { return (int) ::ceil (value); }
+ int floor () const { return (int) ::floor (value); }
+
+ bool in_int_range () const
+ { return ((double) (int16_t) to_int () == value); }
+
+ bool operator > (const Number &n) const
+ { return value > n.to_real (); }
+
+ bool operator < (const Number &n) const
+ { return n > *this; }
+
+ bool operator >= (const Number &n) const
+ { return !(*this < n); }
+
+ bool operator <= (const Number &n) const
+ { return !(*this > n); }
+
+ const Number &operator += (const Number &n)
+ {
+ set_real (to_real () + n.to_real ());
+
+ return *this;
+ }
+
+ protected:
+ double value;
+};
+
+/* byte string */
+struct UnsizedByteStr : UnsizedArrayOf <HBUINT8>
+{
+ // encode 2-byte int (Dict/CharString) or 4-byte int (Dict)
+ template <typename INTTYPE, int minVal, int maxVal>
+ static bool serialize_int (hb_serialize_context_t *c, OpCode intOp, int value)
+ {
+ TRACE_SERIALIZE (this);
+
+ if (unlikely ((value < minVal || value > maxVal)))
+ return_trace (false);
+
+ HBUINT8 *p = c->allocate_size<HBUINT8> (1);
+ if (unlikely (p == nullptr)) return_trace (false);
+ p->set (intOp);
+
+ INTTYPE *ip = c->allocate_size<INTTYPE> (INTTYPE::static_size);
+ if (unlikely (ip == nullptr)) return_trace (false);
+ ip->set ((unsigned int)value);
+
+ return_trace (true);
+ }
+
+ static bool serialize_int4 (hb_serialize_context_t *c, int value)
+ { return serialize_int<HBUINT32, 0, 0x7FFFFFFF> (c, OpCode_longintdict, value); }
+
+ static bool serialize_int2 (hb_serialize_context_t *c, int value)
+ { return serialize_int<HBUINT16, 0, 0x7FFF> (c, OpCode_shortint, value); }
+
+ /* Defining null_size allows a Null object may be created. Should be safe because:
+ * A descendent struct Dict uses a Null pointer to indicate a missing table,
+ * checked before access.
+ * ByteStr, a wrapper struct pairing a byte pointer along with its length, always
+ * checks the length before access. A Null pointer is used as the initial pointer
+ * along with zero length by the default ctor.
+ */
+ DEFINE_SIZE_MIN(0);
+};
+
+struct ByteStr
+{
+ ByteStr ()
+ : str (&Null(UnsizedByteStr)), len (0) {}
+ ByteStr (const UnsizedByteStr& s, unsigned int l)
+ : str (&s), len (l) {}
+ ByteStr (const char *s, unsigned int l=0)
+ : str ((const UnsizedByteStr *)s), len (l) {}
+ /* sub-string */
+ ByteStr (const ByteStr &bs, unsigned int offset, unsigned int len_)
+ {
+ str = (const UnsizedByteStr *)&bs.str[offset];
+ len = len_;
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const { return str->sanitize (c, len); }
+
+ const HBUINT8& operator [] (unsigned int i) const
+ {
+ if (likely (str && (i < len)))
+ return (*str)[i];
+ else
+ return Null(HBUINT8);
+ }
+
+ bool serialize (hb_serialize_context_t *c, const ByteStr &src)
+ {
+ TRACE_SERIALIZE (this);
+ HBUINT8 *dest = c->allocate_size<HBUINT8> (src.len);
+ if (unlikely (dest == nullptr))
+ return_trace (false);
+ memcpy (dest, src.str, src.len);
+ return_trace (true);
+ }
+
+ unsigned int get_size () const { return len; }
+
+ bool check_limit (unsigned int offset, unsigned int count) const
+ { return (offset + count <= len); }
+
+ const UnsizedByteStr *str;
+ unsigned int len;
+};
+
+struct SubByteStr
+{
+ SubByteStr ()
+ { init (); }
+
+ void init ()
+ {
+ str = ByteStr (0);
+ offset = 0;
+ error = false;
+ }
+
+ void fini () {}
+
+ SubByteStr (const ByteStr &str_, unsigned int offset_ = 0)
+ : str (str_), offset (offset_), error (false) {}
+
+ void reset (const ByteStr &str_, unsigned int offset_ = 0)
+ {
+ str = str_;
+ offset = offset_;
+ error = false;
+ }
+
+ const HBUINT8& operator [] (int i) {
+ if (unlikely ((unsigned int)(offset + i) >= str.len))
+ {
+ set_error ();
+ return Null(HBUINT8);
+ }
+ else
+ return str[offset + i];
+ }
+
+ operator ByteStr () const { return ByteStr (str, offset, str.len - offset); }
+
+ bool avail (unsigned int count=1) const
+ {
+ return (!in_error () && str.check_limit (offset, count));
+ }
+ void inc (unsigned int count=1)
+ {
+ if (likely (!in_error () && (offset <= str.len) && (offset + count <= str.len)))
+ {
+ offset += count;
+ }
+ else
+ {
+ offset = str.len;
+ set_error ();
+ }
+ }
+
+ void set_error () { error = true; }
+ bool in_error () const { return error; }
+
+ ByteStr str;
+ unsigned int offset; /* beginning of the sub-string within str */
+
+ protected:
+ bool error;
+};
+
+typedef hb_vector_t<ByteStr> ByteStrArray;
+
+/* stack */
+template <typename ELEM, int LIMIT>
+struct Stack
+{
+ void init ()
+ {
+ error = false;
+ count = 0;
+ elements.init ();
+ elements.resize (kSizeLimit);
+ for (unsigned int i = 0; i < elements.len; i++)
+ elements[i].init ();
+ }
+
+ void fini ()
+ {
+ elements.fini_deep ();
+ }
+
+ ELEM& operator [] (unsigned int i)
+ {
+ if (unlikely (i >= count)) set_error ();
+ return elements[i];
+ }
+
+ void push (const ELEM &v)
+ {
+ if (likely (count < elements.len))
+ elements[count++] = v;
+ else
+ set_error ();
+ }
+
+ ELEM &push ()
+ {
+ if (likely (count < elements.len))
+ return elements[count++];
+ else
+ {
+ set_error ();
+ return Crap(ELEM);
+ }
+ }
+
+ ELEM& pop ()
+ {
+ if (likely (count > 0))
+ return elements[--count];
+ else
+ {
+ set_error ();
+ return Crap(ELEM);
+ }
+ }
+
+ void pop (unsigned int n)
+ {
+ if (likely (count >= n))
+ count -= n;
+ else
+ set_error ();
+ }
+
+ const ELEM& peek ()
+ {
+ if (likely (count > 0))
+ return elements[count-1];
+ else
+ {
+ set_error ();
+ return Null(ELEM);
+ }
+ }
+
+ void unpop ()
+ {
+ if (likely (count < elements.len))
+ count++;
+ else
+ set_error ();
+ }
+
+ void clear () { count = 0; }
+
+ bool in_error () const { return (error || elements.in_error ()); }
+ void set_error () { error = true; }
+
+ unsigned int get_count () const { return count; }
+ bool is_empty () const { return count == 0; }
+
+ static const unsigned int kSizeLimit = LIMIT;
+
+ protected:
+ bool error;
+ unsigned int count;
+ hb_vector_t<ELEM, kSizeLimit> elements;
+};
+
+/* argument stack */
+template <typename ARG=Number>
+struct ArgStack : Stack<ARG, 513>
+{
+ void push_int (int v)
+ {
+ ARG &n = S::push ();
+ n.set_int (v);
+ }
+
+ void push_fixed (int32_t v)
+ {
+ ARG &n = S::push ();
+ n.set_fixed (v);
+ }
+
+ void push_real (double v)
+ {
+ ARG &n = S::push ();
+ n.set_real (v);
+ }
+
+ ARG& pop_num () { return this->pop (); }
+
+ int pop_int () { return this->pop ().to_int (); }
+
+ unsigned int pop_uint ()
+ {
+ int i = pop_int ();
+ if (unlikely (i < 0))
+ {
+ i = 0;
+ S::set_error ();
+ }
+ return (unsigned)i;
+ }
+
+ void push_longint_from_substr (SubByteStr& substr)
+ {
+ push_int ((substr[0] << 24) | (substr[1] << 16) | (substr[2] << 8) | (substr[3]));
+ substr.inc (4);
+ }
+
+ bool push_fixed_from_substr (SubByteStr& substr)
+ {
+ if (unlikely (!substr.avail (4)))
+ return false;
+ push_fixed ((int32_t)*(const HBUINT32*)&substr[0]);
+ substr.inc (4);
+ return true;
+ }
+
+ hb_array_t<const ARG> get_subarray (unsigned int start) const
+ {
+ return S::elements.sub_array (start);
+ }
+
+ private:
+ typedef Stack<ARG, 513> S;
+};
+
+/* an operator prefixed by its operands in a byte string */
+struct OpStr
+{
+ void init () {}
+ void fini () {}
+
+ OpCode op;
+ ByteStr str;
+};
+
+/* base of OP_SERIALIZER */
+struct OpSerializer
+{
+ protected:
+ bool copy_opstr (hb_serialize_context_t *c, const OpStr& opstr) const
+ {
+ TRACE_SERIALIZE (this);
+
+ HBUINT8 *d = c->allocate_size<HBUINT8> (opstr.str.len);
+ if (unlikely (d == nullptr)) return_trace (false);
+ memcpy (d, &opstr.str.str[0], opstr.str.len);
+ return_trace (true);
+ }
+};
+
+template <typename VAL>
+struct ParsedValues
+{
+ void init ()
+ {
+ opStart = 0;
+ values.init ();
+ }
+ void fini () { values.fini_deep (); }
+
+ void add_op (OpCode op, const SubByteStr& substr = SubByteStr ())
+ {
+ VAL *val = values.push ();
+ val->op = op;
+ val->str = ByteStr (substr.str, opStart, substr.offset - opStart);
+ opStart = substr.offset;
+ }
+
+ void add_op (OpCode op, const SubByteStr& substr, const VAL &v)
+ {
+ VAL *val = values.push (v);
+ val->op = op;
+ val->str = ByteStr (substr.str, opStart, substr.offset - opStart);
+ opStart = substr.offset;
+ }
+
+ bool has_op (OpCode op) const
+ {
+ for (unsigned int i = 0; i < get_count (); i++)
+ if (get_value (i).op == op) return true;
+ return false;
+ }
+
+ unsigned get_count () const { return values.len; }
+ const VAL &get_value (unsigned int i) const { return values[i]; }
+ const VAL &operator [] (unsigned int i) const { return get_value (i); }
+
+ unsigned int opStart;
+ hb_vector_t<VAL> values;
+};
+
+template <typename ARG=Number>
+struct InterpEnv
+{
+ void init (const ByteStr &str_)
+ {
+ substr.reset (str_);
+ argStack.init ();
+ error = false;
+ }
+ void fini () { argStack.fini (); }
+
+ bool in_error () const
+ { return error || substr.in_error () || argStack.in_error (); }
+
+ void set_error () { error = true; }
+
+ OpCode fetch_op ()
+ {
+ OpCode op = OpCode_Invalid;
+ if (unlikely (!substr.avail ()))
+ return OpCode_Invalid;
+ op = (OpCode)(unsigned char)substr[0];
+ if (op == OpCode_escape) {
+ if (unlikely (!substr.avail ()))
+ return OpCode_Invalid;
+ op = Make_OpCode_ESC(substr[1]);
+ substr.inc ();
+ }
+ substr.inc ();
+ return op;
+ }
+
+ const ARG& eval_arg (unsigned int i)
+ {
+ return argStack[i];
+ }
+
+ ARG& pop_arg ()
+ {
+ return argStack.pop ();
+ }
+
+ void pop_n_args (unsigned int n)
+ {
+ argStack.pop (n);
+ }
+
+ void clear_args ()
+ {
+ pop_n_args (argStack.get_count ());
+ }
+
+ SubByteStr substr;
+ ArgStack<ARG> argStack;
+ protected:
+ bool error;
+};
+
+typedef InterpEnv<> NumInterpEnv;
+
+template <typename ARG=Number>
+struct OpSet
+{
+ static void process_op (OpCode op, InterpEnv<ARG>& env)
+ {
+ switch (op) {
+ case OpCode_shortint:
+ env.argStack.push_int ((int16_t)((env.substr[0] << 8) | env.substr[1]));
+ env.substr.inc (2);
+ break;
+
+ case OpCode_TwoBytePosInt0: case OpCode_TwoBytePosInt1:
+ case OpCode_TwoBytePosInt2: case OpCode_TwoBytePosInt3:
+ env.argStack.push_int ((int16_t)((op - OpCode_TwoBytePosInt0) * 256 + env.substr[0] + 108));
+ env.substr.inc ();
+ break;
+
+ case OpCode_TwoByteNegInt0: case OpCode_TwoByteNegInt1:
+ case OpCode_TwoByteNegInt2: case OpCode_TwoByteNegInt3:
+ env.argStack.push_int ((int16_t)(-(op - OpCode_TwoByteNegInt0) * 256 - env.substr[0] - 108));
+ env.substr.inc ();
+ break;
+
+ default:
+ /* 1-byte integer */
+ if (likely ((OpCode_OneByteIntFirst <= op) && (op <= OpCode_OneByteIntLast)))
+ {
+ env.argStack.push_int ((int)op - 139);
+ } else {
+ /* invalid unknown operator */
+ env.clear_args ();
+ env.set_error ();
+ }
+ break;
+ }
+ }
+};
+
+template <typename ENV>
+struct Interpreter {
+
+ ~Interpreter() { fini (); }
+
+ void fini () { env.fini (); }
+
+ ENV env;
+};
+
+} /* namespace CFF */
+
+#endif /* HB_CFF_INTERP_COMMON_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff-interp-cs-common.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff-interp-cs-common.hh
new file mode 100644
index 00000000000..e78d5571c94
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff-interp-cs-common.hh
@@ -0,0 +1,904 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+#ifndef HB_CFF_INTERP_CS_COMMON_HH
+#define HB_CFF_INTERP_CS_COMMON_HH
+
+#include "hb.hh"
+#include "hb-cff-interp-common.hh"
+
+namespace CFF {
+
+using namespace OT;
+
+enum CSType {
+ CSType_CharString,
+ CSType_GlobalSubr,
+ CSType_LocalSubr
+};
+
+struct CallContext
+{
+ void init (const SubByteStr substr_=SubByteStr (), CSType type_=CSType_CharString, unsigned int subr_num_=0)
+ {
+ substr = substr_;
+ type = type_;
+ subr_num = subr_num_;
+ }
+
+ void fini () {}
+
+ SubByteStr substr;
+ CSType type;
+ unsigned int subr_num;
+};
+
+/* call stack */
+const unsigned int kMaxCallLimit = 10;
+struct CallStack : Stack<CallContext, kMaxCallLimit> {};
+
+template <typename SUBRS>
+struct BiasedSubrs
+{
+ void init (const SUBRS &subrs_)
+ {
+ subrs = &subrs_;
+ unsigned int nSubrs = get_count ();
+ if (nSubrs < 1240)
+ bias = 107;
+ else if (nSubrs < 33900)
+ bias = 1131;
+ else
+ bias = 32768;
+ }
+
+ void fini () {}
+
+ unsigned int get_count () const { return (subrs == nullptr)? 0: subrs->count; }
+ unsigned int get_bias () const { return bias; }
+
+ ByteStr operator [] (unsigned int index) const
+ {
+ if (unlikely ((subrs == nullptr) || index >= subrs->count))
+ return Null(ByteStr);
+ else
+ return (*subrs)[index];
+ }
+
+ protected:
+ unsigned int bias;
+ const SUBRS *subrs;
+};
+
+struct Point
+{
+ void init ()
+ {
+ x.init ();
+ y.init ();
+ }
+
+ void set_int (int _x, int _y)
+ {
+ x.set_int (_x);
+ y.set_int (_y);
+ }
+
+ void move_x (const Number &dx) { x += dx; }
+ void move_y (const Number &dy) { y += dy; }
+ void move (const Number &dx, const Number &dy) { move_x (dx); move_y (dy); }
+ void move (const Point &d) { move_x (d.x); move_y (d.y); }
+
+ Number x;
+ Number y;
+};
+
+template <typename ARG, typename SUBRS>
+struct CSInterpEnv : InterpEnv<ARG>
+{
+ void init (const ByteStr &str, const SUBRS &globalSubrs_, const SUBRS &localSubrs_)
+ {
+ InterpEnv<ARG>::init (str);
+
+ context.init (str, CSType_CharString);
+ seen_moveto = true;
+ seen_hintmask = false;
+ hstem_count = 0;
+ vstem_count = 0;
+ pt.init ();
+ callStack.init ();
+ globalSubrs.init (globalSubrs_);
+ localSubrs.init (localSubrs_);
+ }
+ void fini ()
+ {
+ InterpEnv<ARG>::fini ();
+
+ callStack.fini ();
+ globalSubrs.fini ();
+ localSubrs.fini ();
+ }
+
+ bool in_error () const
+ {
+ return callStack.in_error () || SUPER::in_error ();
+ }
+
+ bool popSubrNum (const BiasedSubrs<SUBRS>& biasedSubrs, unsigned int &subr_num)
+ {
+ int n = SUPER::argStack.pop_int ();
+ n += biasedSubrs.get_bias ();
+ if (unlikely ((n < 0) || ((unsigned int)n >= biasedSubrs.get_count ())))
+ return false;
+
+ subr_num = (unsigned int)n;
+ return true;
+ }
+
+ void callSubr (const BiasedSubrs<SUBRS>& biasedSubrs, CSType type)
+ {
+ unsigned int subr_num;
+
+ if (unlikely (!popSubrNum (biasedSubrs, subr_num)
+ || callStack.get_count () >= kMaxCallLimit))
+ {
+ SUPER::set_error ();
+ return;
+ }
+ context.substr = SUPER::substr;
+ callStack.push (context);
+
+ context.init ( biasedSubrs[subr_num], type, subr_num);
+ SUPER::substr = context.substr;
+ }
+
+ void returnFromSubr ()
+ {
+ if (unlikely (SUPER::substr.in_error ()))
+ SUPER::set_error ();
+ context = callStack.pop ();
+ SUPER::substr = context.substr;
+ }
+
+ void determine_hintmask_size ()
+ {
+ if (!seen_hintmask)
+ {
+ vstem_count += SUPER::argStack.get_count() / 2;
+ hintmask_size = (hstem_count + vstem_count + 7) >> 3;
+ seen_hintmask = true;
+ }
+ }
+
+ void set_endchar (bool endchar_flag_) { endchar_flag = endchar_flag_; }
+ bool is_endchar () const { return endchar_flag; }
+
+ const Number &get_x () const { return pt.x; }
+ const Number &get_y () const { return pt.y; }
+ const Point &get_pt () const { return pt; }
+
+ void moveto (const Point &pt_ ) { pt = pt_; }
+
+ public:
+ CallContext context;
+ bool endchar_flag;
+ bool seen_moveto;
+ bool seen_hintmask;
+
+ unsigned int hstem_count;
+ unsigned int vstem_count;
+ unsigned int hintmask_size;
+ CallStack callStack;
+ BiasedSubrs<SUBRS> globalSubrs;
+ BiasedSubrs<SUBRS> localSubrs;
+
+ private:
+ Point pt;
+
+ typedef InterpEnv<ARG> SUPER;
+};
+
+template <typename ENV, typename PARAM>
+struct PathProcsNull
+{
+ static void rmoveto (ENV &env, PARAM& param) {}
+ static void hmoveto (ENV &env, PARAM& param) {}
+ static void vmoveto (ENV &env, PARAM& param) {}
+ static void rlineto (ENV &env, PARAM& param) {}
+ static void hlineto (ENV &env, PARAM& param) {}
+ static void vlineto (ENV &env, PARAM& param) {}
+ static void rrcurveto (ENV &env, PARAM& param) {}
+ static void rcurveline (ENV &env, PARAM& param) {}
+ static void rlinecurve (ENV &env, PARAM& param) {}
+ static void vvcurveto (ENV &env, PARAM& param) {}
+ static void hhcurveto (ENV &env, PARAM& param) {}
+ static void vhcurveto (ENV &env, PARAM& param) {}
+ static void hvcurveto (ENV &env, PARAM& param) {}
+ static void moveto (ENV &env, PARAM& param, const Point &pt) {}
+ static void line (ENV &env, PARAM& param, const Point &pt1) {}
+ static void curve (ENV &env, PARAM& param, const Point &pt1, const Point &pt2, const Point &pt3) {}
+ static void hflex (ENV &env, PARAM& param) {}
+ static void flex (ENV &env, PARAM& param) {}
+ static void hflex1 (ENV &env, PARAM& param) {}
+ static void flex1 (ENV &env, PARAM& param) {}
+};
+
+template <typename ARG, typename OPSET, typename ENV, typename PARAM, typename PATH=PathProcsNull<ENV, PARAM> >
+struct CSOpSet : OpSet<ARG>
+{
+ static void process_op (OpCode op, ENV &env, PARAM& param)
+ {
+ switch (op) {
+
+ case OpCode_return:
+ env.returnFromSubr ();
+ break;
+ case OpCode_endchar:
+ OPSET::check_width (op, env, param);
+ env.set_endchar (true);
+ OPSET::flush_args_and_op (op, env, param);
+ break;
+
+ case OpCode_fixedcs:
+ env.argStack.push_fixed_from_substr (env.substr);
+ break;
+
+ case OpCode_callsubr:
+ env.callSubr (env.localSubrs, CSType_LocalSubr);
+ break;
+
+ case OpCode_callgsubr:
+ env.callSubr (env.globalSubrs, CSType_GlobalSubr);
+ break;
+
+ case OpCode_hstem:
+ case OpCode_hstemhm:
+ OPSET::check_width (op, env, param);
+ OPSET::process_hstem (op, env, param);
+ break;
+ case OpCode_vstem:
+ case OpCode_vstemhm:
+ OPSET::check_width (op, env, param);
+ OPSET::process_vstem (op, env, param);
+ break;
+ case OpCode_hintmask:
+ case OpCode_cntrmask:
+ OPSET::check_width (op, env, param);
+ OPSET::process_hintmask (op, env, param);
+ break;
+ case OpCode_rmoveto:
+ OPSET::check_width (op, env, param);
+ PATH::rmoveto (env, param);
+ OPSET::process_post_move (op, env, param);
+ break;
+ case OpCode_hmoveto:
+ OPSET::check_width (op, env, param);
+ PATH::hmoveto (env, param);
+ OPSET::process_post_move (op, env, param);
+ break;
+ case OpCode_vmoveto:
+ OPSET::check_width (op, env, param);
+ PATH::vmoveto (env, param);
+ OPSET::process_post_move (op, env, param);
+ break;
+ case OpCode_rlineto:
+ PATH::rlineto (env, param);
+ process_post_path (op, env, param);
+ break;
+ case OpCode_hlineto:
+ PATH::hlineto (env, param);
+ process_post_path (op, env, param);
+ break;
+ case OpCode_vlineto:
+ PATH::vlineto (env, param);
+ process_post_path (op, env, param);
+ break;
+ case OpCode_rrcurveto:
+ PATH::rrcurveto (env, param);
+ process_post_path (op, env, param);
+ break;
+ case OpCode_rcurveline:
+ PATH::rcurveline (env, param);
+ process_post_path (op, env, param);
+ break;
+ case OpCode_rlinecurve:
+ PATH::rlinecurve (env, param);
+ process_post_path (op, env, param);
+ break;
+ case OpCode_vvcurveto:
+ PATH::vvcurveto (env, param);
+ process_post_path (op, env, param);
+ break;
+ case OpCode_hhcurveto:
+ PATH::hhcurveto (env, param);
+ process_post_path (op, env, param);
+ break;
+ case OpCode_vhcurveto:
+ PATH::vhcurveto (env, param);
+ process_post_path (op, env, param);
+ break;
+ case OpCode_hvcurveto:
+ PATH::hvcurveto (env, param);
+ process_post_path (op, env, param);
+ break;
+
+ case OpCode_hflex:
+ PATH::hflex (env, param);
+ OPSET::process_post_flex (op, env, param);
+ break;
+
+ case OpCode_flex:
+ PATH::flex (env, param);
+ OPSET::process_post_flex (op, env, param);
+ break;
+
+ case OpCode_hflex1:
+ PATH::hflex1 (env, param);
+ OPSET::process_post_flex (op, env, param);
+ break;
+
+ case OpCode_flex1:
+ PATH::flex1 (env, param);
+ OPSET::process_post_flex (op, env, param);
+ break;
+
+ default:
+ SUPER::process_op (op, env);
+ break;
+ }
+ }
+
+ static void process_hstem (OpCode op, ENV &env, PARAM& param)
+ {
+ env.hstem_count += env.argStack.get_count () / 2;
+ OPSET::flush_args_and_op (op, env, param);
+ }
+
+ static void process_vstem (OpCode op, ENV &env, PARAM& param)
+ {
+ env.vstem_count += env.argStack.get_count () / 2;
+ OPSET::flush_args_and_op (op, env, param);
+ }
+
+ static void process_hintmask (OpCode op, ENV &env, PARAM& param)
+ {
+ env.determine_hintmask_size ();
+ if (likely (env.substr.avail (env.hintmask_size)))
+ {
+ OPSET::flush_hintmask (op, env, param);
+ env.substr.inc (env.hintmask_size);
+ }
+ }
+
+ static void process_post_flex (OpCode op, ENV &env, PARAM& param)
+ {
+ OPSET::flush_args_and_op (op, env, param);
+ }
+
+ static void check_width (OpCode op, ENV &env, PARAM& param)
+ {}
+
+ static void process_post_move (OpCode op, ENV &env, PARAM& param)
+ {
+ if (!env.seen_moveto)
+ {
+ env.determine_hintmask_size ();
+ env.seen_moveto = true;
+ }
+ OPSET::flush_args_and_op (op, env, param);
+ }
+
+ static void process_post_path (OpCode op, ENV &env, PARAM& param)
+ {
+ OPSET::flush_args_and_op (op, env, param);
+ }
+
+ static void flush_args_and_op (OpCode op, ENV &env, PARAM& param)
+ {
+ OPSET::flush_args (env, param);
+ OPSET::flush_op (op, env, param);
+ }
+
+ static void flush_args (ENV &env, PARAM& param)
+ {
+ env.pop_n_args (env.argStack.get_count ());
+ }
+
+ static void flush_op (OpCode op, ENV &env, PARAM& param)
+ {
+ }
+
+ static void flush_hintmask (OpCode op, ENV &env, PARAM& param)
+ {
+ OPSET::flush_args_and_op (op, env, param);
+ }
+
+ static bool is_number_op (OpCode op)
+ {
+ switch (op)
+ {
+ case OpCode_shortint:
+ case OpCode_fixedcs:
+ case OpCode_TwoBytePosInt0: case OpCode_TwoBytePosInt1:
+ case OpCode_TwoBytePosInt2: case OpCode_TwoBytePosInt3:
+ case OpCode_TwoByteNegInt0: case OpCode_TwoByteNegInt1:
+ case OpCode_TwoByteNegInt2: case OpCode_TwoByteNegInt3:
+ return true;
+
+ default:
+ /* 1-byte integer */
+ return (OpCode_OneByteIntFirst <= op) && (op <= OpCode_OneByteIntLast);
+ }
+ }
+
+ protected:
+ typedef OpSet<ARG> SUPER;
+};
+
+template <typename PATH, typename ENV, typename PARAM>
+struct PathProcs
+{
+ static void rmoveto (ENV &env, PARAM& param)
+ {
+ Point pt1 = env.get_pt ();
+ const Number &dy = env.pop_arg ();
+ const Number &dx = env.pop_arg ();
+ pt1.move (dx, dy);
+ PATH::moveto (env, param, pt1);
+ }
+
+ static void hmoveto (ENV &env, PARAM& param)
+ {
+ Point pt1 = env.get_pt ();
+ pt1.move_x (env.pop_arg ());
+ PATH::moveto (env, param, pt1);
+ }
+
+ static void vmoveto (ENV &env, PARAM& param)
+ {
+ Point pt1 = env.get_pt ();
+ pt1.move_y (env.pop_arg ());
+ PATH::moveto (env, param, pt1);
+ }
+
+ static void rlineto (ENV &env, PARAM& param)
+ {
+ for (unsigned int i = 0; i + 2 <= env.argStack.get_count (); i += 2)
+ {
+ Point pt1 = env.get_pt ();
+ pt1.move (env.eval_arg (i), env.eval_arg (i+1));
+ PATH::line (env, param, pt1);
+ }
+ }
+
+ static void hlineto (ENV &env, PARAM& param)
+ {
+ Point pt1;
+ unsigned int i = 0;
+ for (; i + 2 <= env.argStack.get_count (); i += 2)
+ {
+ pt1 = env.get_pt ();
+ pt1.move_x (env.eval_arg (i));
+ PATH::line (env, param, pt1);
+ pt1.move_y (env.eval_arg (i+1));
+ PATH::line (env, param, pt1);
+ }
+ if (i < env.argStack.get_count ())
+ {
+ pt1 = env.get_pt ();
+ pt1.move_x (env.eval_arg (i));
+ PATH::line (env, param, pt1);
+ }
+ }
+
+ static void vlineto (ENV &env, PARAM& param)
+ {
+ Point pt1;
+ unsigned int i = 0;
+ for (; i + 2 <= env.argStack.get_count (); i += 2)
+ {
+ pt1 = env.get_pt ();
+ pt1.move_y (env.eval_arg (i));
+ PATH::line (env, param, pt1);
+ pt1.move_x (env.eval_arg (i+1));
+ PATH::line (env, param, pt1);
+ }
+ if (i < env.argStack.get_count ())
+ {
+ pt1 = env.get_pt ();
+ pt1.move_y (env.eval_arg (i));
+ PATH::line (env, param, pt1);
+ }
+ }
+
+ static void rrcurveto (ENV &env, PARAM& param)
+ {
+ for (unsigned int i = 0; i + 6 <= env.argStack.get_count (); i += 6)
+ {
+ Point pt1 = env.get_pt ();
+ pt1.move (env.eval_arg (i), env.eval_arg (i+1));
+ Point pt2 = pt1;
+ pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
+ Point pt3 = pt2;
+ pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
+ PATH::curve (env, param, pt1, pt2, pt3);
+ }
+ }
+
+ static void rcurveline (ENV &env, PARAM& param)
+ {
+ unsigned int i = 0;
+ for (; i + 6 <= env.argStack.get_count (); i += 6)
+ {
+ Point pt1 = env.get_pt ();
+ pt1.move (env.eval_arg (i), env.eval_arg (i+1));
+ Point pt2 = pt1;
+ pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
+ Point pt3 = pt2;
+ pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
+ PATH::curve (env, param, pt1, pt2, pt3);
+ }
+ for (; i + 2 <= env.argStack.get_count (); i += 2)
+ {
+ Point pt1 = env.get_pt ();
+ pt1.move (env.eval_arg (i), env.eval_arg (i+1));
+ PATH::line (env, param, pt1);
+ }
+ }
+
+ static void rlinecurve (ENV &env, PARAM& param)
+ {
+ unsigned int i = 0;
+ unsigned int line_limit = (env.argStack.get_count () % 6);
+ for (; i + 2 <= line_limit; i += 2)
+ {
+ Point pt1 = env.get_pt ();
+ pt1.move (env.eval_arg (i), env.eval_arg (i+1));
+ PATH::line (env, param, pt1);
+ }
+ for (; i + 6 <= env.argStack.get_count (); i += 6)
+ {
+ Point pt1 = env.get_pt ();
+ pt1.move (env.eval_arg (i), env.eval_arg (i+1));
+ Point pt2 = pt1;
+ pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
+ Point pt3 = pt2;
+ pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
+ PATH::curve (env, param, pt1, pt2, pt3);
+ }
+ }
+
+ static void vvcurveto (ENV &env, PARAM& param)
+ {
+ unsigned int i = 0;
+ Point pt1 = env.get_pt ();
+ if ((env.argStack.get_count () & 1) != 0)
+ pt1.move_x (env.eval_arg (i++));
+ for (; i + 4 <= env.argStack.get_count (); i += 4)
+ {
+ pt1.move_y (env.eval_arg (i));
+ Point pt2 = pt1;
+ pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
+ Point pt3 = pt2;
+ pt3.move_y (env.eval_arg (i+3));
+ PATH::curve (env, param, pt1, pt2, pt3);
+ pt1 = env.get_pt ();
+ }
+ }
+
+ static void hhcurveto (ENV &env, PARAM& param)
+ {
+ unsigned int i = 0;
+ Point pt1 = env.get_pt ();
+ if ((env.argStack.get_count () & 1) != 0)
+ pt1.move_y (env.eval_arg (i++));
+ for (; i + 4 <= env.argStack.get_count (); i += 4)
+ {
+ pt1.move_x (env.eval_arg (i));
+ Point pt2 = pt1;
+ pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
+ Point pt3 = pt2;
+ pt3.move_x (env.eval_arg (i+3));
+ PATH::curve (env, param, pt1, pt2, pt3);
+ pt1 = env.get_pt ();
+ }
+ }
+
+ static void vhcurveto (ENV &env, PARAM& param)
+ {
+ Point pt1, pt2, pt3;
+ unsigned int i = 0;
+ if ((env.argStack.get_count () % 8) >= 4)
+ {
+ Point pt1 = env.get_pt ();
+ pt1.move_y (env.eval_arg (i));
+ Point pt2 = pt1;
+ pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
+ Point pt3 = pt2;
+ pt3.move_x (env.eval_arg (i+3));
+ i += 4;
+
+ for (; i + 8 <= env.argStack.get_count (); i += 8)
+ {
+ PATH::curve (env, param, pt1, pt2, pt3);
+ pt1 = env.get_pt ();
+ pt1.move_x (env.eval_arg (i));
+ pt2 = pt1;
+ pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
+ pt3 = pt2;
+ pt3.move_y (env.eval_arg (i+3));
+ PATH::curve (env, param, pt1, pt2, pt3);
+
+ pt1 = pt3;
+ pt1.move_y (env.eval_arg (i+4));
+ pt2 = pt1;
+ pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
+ pt3 = pt2;
+ pt3.move_x (env.eval_arg (i+7));
+ }
+ if (i < env.argStack.get_count ())
+ pt3.move_y (env.eval_arg (i));
+ PATH::curve (env, param, pt1, pt2, pt3);
+ }
+ else
+ {
+ for (; i + 8 <= env.argStack.get_count (); i += 8)
+ {
+ pt1 = env.get_pt ();
+ pt1.move_y (env.eval_arg (i));
+ pt2 = pt1;
+ pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
+ pt3 = pt2;
+ pt3.move_x (env.eval_arg (i+3));
+ PATH::curve (env, param, pt1, pt2, pt3);
+
+ pt1 = pt3;
+ pt1.move_x (env.eval_arg (i+4));
+ pt2 = pt1;
+ pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
+ pt3 = pt2;
+ pt3.move_y (env.eval_arg (i+7));
+ if ((env.argStack.get_count () - i < 16) && ((env.argStack.get_count () & 1) != 0))
+ pt3.move_x (env.eval_arg (i+8));
+ PATH::curve (env, param, pt1, pt2, pt3);
+ }
+ }
+ }
+
+ static void hvcurveto (ENV &env, PARAM& param)
+ {
+ Point pt1, pt2, pt3;
+ unsigned int i = 0;
+ if ((env.argStack.get_count () % 8) >= 4)
+ {
+ Point pt1 = env.get_pt ();
+ pt1.move_x (env.eval_arg (i));
+ Point pt2 = pt1;
+ pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
+ Point pt3 = pt2;
+ pt3.move_y (env.eval_arg (i+3));
+ i += 4;
+
+ for (; i + 8 <= env.argStack.get_count (); i += 8)
+ {
+ PATH::curve (env, param, pt1, pt2, pt3);
+ pt1 = env.get_pt ();
+ pt1.move_y (env.eval_arg (i));
+ pt2 = pt1;
+ pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
+ pt3 = pt2;
+ pt3.move_x (env.eval_arg (i+3));
+ PATH::curve (env, param, pt1, pt2, pt3);
+
+ pt1 = pt3;
+ pt1.move_x (env.eval_arg (i+4));
+ pt2 = pt1;
+ pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
+ pt3 = pt2;
+ pt3.move_y (env.eval_arg (i+7));
+ }
+ if (i < env.argStack.get_count ())
+ pt3.move_x (env.eval_arg (i));
+ PATH::curve (env, param, pt1, pt2, pt3);
+ }
+ else
+ {
+ for (; i + 8 <= env.argStack.get_count (); i += 8)
+ {
+ pt1 = env.get_pt ();
+ pt1.move_x (env.eval_arg (i));
+ pt2 = pt1;
+ pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
+ pt3 = pt2;
+ pt3.move_y (env.eval_arg (i+3));
+ PATH::curve (env, param, pt1, pt2, pt3);
+
+ pt1 = pt3;
+ pt1.move_y (env.eval_arg (i+4));
+ pt2 = pt1;
+ pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
+ pt3 = pt2;
+ pt3.move_x (env.eval_arg (i+7));
+ if ((env.argStack.get_count () - i < 16) && ((env.argStack.get_count () & 1) != 0))
+ pt3.move_y (env.eval_arg (i+8));
+ PATH::curve (env, param, pt1, pt2, pt3);
+ }
+ }
+ }
+
+ /* default actions to be overridden */
+ static void moveto (ENV &env, PARAM& param, const Point &pt)
+ { env.moveto (pt); }
+
+ static void line (ENV &env, PARAM& param, const Point &pt1)
+ { PATH::moveto (env, param, pt1); }
+
+ static void curve (ENV &env, PARAM& param, const Point &pt1, const Point &pt2, const Point &pt3)
+ { PATH::moveto (env, param, pt3); }
+
+ static void hflex (ENV &env, PARAM& param)
+ {
+ if (likely (env.argStack.get_count () == 7))
+ {
+ Point pt1 = env.get_pt ();
+ pt1.move_x (env.eval_arg (0));
+ Point pt2 = pt1;
+ pt2.move (env.eval_arg (1), env.eval_arg (2));
+ Point pt3 = pt2;
+ pt3.move_x (env.eval_arg (3));
+ Point pt4 = pt3;
+ pt4.move_x (env.eval_arg (4));
+ Point pt5 = pt4;
+ pt5.move_x (env.eval_arg (5));
+ pt5.y = pt1.y;
+ Point pt6 = pt5;
+ pt6.move_x (env.eval_arg (6));
+
+ curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
+ }
+ else
+ env.set_error ();
+ }
+
+ static void flex (ENV &env, PARAM& param)
+ {
+ if (likely (env.argStack.get_count () == 13))
+ {
+ Point pt1 = env.get_pt ();
+ pt1.move (env.eval_arg (0), env.eval_arg (1));
+ Point pt2 = pt1;
+ pt2.move (env.eval_arg (2), env.eval_arg (3));
+ Point pt3 = pt2;
+ pt3.move (env.eval_arg (4), env.eval_arg (5));
+ Point pt4 = pt3;
+ pt4.move (env.eval_arg (6), env.eval_arg (7));
+ Point pt5 = pt4;
+ pt5.move (env.eval_arg (8), env.eval_arg (9));
+ Point pt6 = pt5;
+ pt6.move (env.eval_arg (10), env.eval_arg (11));
+
+ curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
+ }
+ else
+ env.set_error ();
+ }
+
+ static void hflex1 (ENV &env, PARAM& param)
+ {
+ if (likely (env.argStack.get_count () == 9))
+ {
+ Point pt1 = env.get_pt ();
+ pt1.move (env.eval_arg (0), env.eval_arg (1));
+ Point pt2 = pt1;
+ pt2.move (env.eval_arg (2), env.eval_arg (3));
+ Point pt3 = pt2;
+ pt3.move_x (env.eval_arg (4));
+ Point pt4 = pt3;
+ pt4.move_x (env.eval_arg (5));
+ Point pt5 = pt4;
+ pt5.move (env.eval_arg (6), env.eval_arg (7));
+ Point pt6 = pt5;
+ pt6.move_x (env.eval_arg (8));
+ pt6.y = env.get_pt ().y;
+
+ curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
+ }
+ else
+ env.set_error ();
+ }
+
+ static void flex1 (ENV &env, PARAM& param)
+ {
+ if (likely (env.argStack.get_count () == 11))
+ {
+ Point d;
+ d.init ();
+ for (unsigned int i = 0; i < 10; i += 2)
+ d.move (env.eval_arg (i), env.eval_arg (i+1));
+
+ Point pt1 = env.get_pt ();
+ pt1.move (env.eval_arg (0), env.eval_arg (1));
+ Point pt2 = pt1;
+ pt2.move (env.eval_arg (2), env.eval_arg (3));
+ Point pt3 = pt2;
+ pt3.move (env.eval_arg (4), env.eval_arg (5));
+ Point pt4 = pt3;
+ pt4.move (env.eval_arg (6), env.eval_arg (7));
+ Point pt5 = pt4;
+ pt5.move (env.eval_arg (8), env.eval_arg (9));
+ Point pt6 = pt5;
+
+ if (fabs (d.x.to_real ()) > fabs (d.y.to_real ()))
+ {
+ pt6.move_x (env.eval_arg (10));
+ pt6.y = env.get_pt ().y;
+ }
+ else
+ {
+ pt6.x = env.get_pt ().x;
+ pt6.move_y (env.eval_arg (10));
+ }
+
+ curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
+ }
+ else
+ env.set_error ();
+ }
+
+ protected:
+ static void curve2 (ENV &env, PARAM& param,
+ const Point &pt1, const Point &pt2, const Point &pt3,
+ const Point &pt4, const Point &pt5, const Point &pt6)
+ {
+ PATH::curve (env, param, pt1, pt2, pt3);
+ PATH::curve (env, param, pt4, pt5, pt6);
+ }
+};
+
+template <typename ENV, typename OPSET, typename PARAM>
+struct CSInterpreter : Interpreter<ENV>
+{
+ bool interpret (PARAM& param)
+ {
+ SUPER::env.set_endchar (false);
+
+ for (;;) {
+ OPSET::process_op (SUPER::env.fetch_op (), SUPER::env, param);
+ if (unlikely (SUPER::env.in_error ()))
+ return false;
+ if (SUPER::env.is_endchar ())
+ break;
+ }
+
+ return true;
+ }
+
+ private:
+ typedef Interpreter<ENV> SUPER;
+};
+
+} /* namespace CFF */
+
+#endif /* HB_CFF_INTERP_CS_COMMON_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff-interp-dict-common.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff-interp-dict-common.hh
new file mode 100644
index 00000000000..8000d76b8bd
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff-interp-dict-common.hh
@@ -0,0 +1,294 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+#ifndef HB_CFF_INTERP_DICT_COMMON_HH
+#define HB_CFF_INTERP_DICT_COMMON_HH
+
+#include "hb-cff-interp-common.hh"
+#include <math.h>
+#include <float.h>
+
+namespace CFF {
+
+using namespace OT;
+
+/* an opstr and the parsed out dict value(s) */
+struct DictVal : OpStr
+{
+ void init () { single_val.set_int (0); }
+ void fini () {}
+
+ Number single_val;
+};
+
+typedef DictVal NumDictVal;
+
+template <typename VAL> struct DictValues : ParsedValues<VAL> {};
+
+template <typename OPSTR=OpStr>
+struct TopDictValues : DictValues<OPSTR>
+{
+ void init ()
+ {
+ DictValues<OPSTR>::init ();
+ charStringsOffset = 0;
+ FDArrayOffset = 0;
+ }
+ void fini () { DictValues<OPSTR>::fini (); }
+
+ unsigned int calculate_serialized_op_size (const OPSTR& opstr) const
+ {
+ switch (opstr.op)
+ {
+ case OpCode_CharStrings:
+ case OpCode_FDArray:
+ return OpCode_Size (OpCode_longintdict) + 4 + OpCode_Size (opstr.op);
+
+ default:
+ return opstr.str.len;
+ }
+ }
+
+ unsigned int charStringsOffset;
+ unsigned int FDArrayOffset;
+};
+
+struct DictOpSet : OpSet<Number>
+{
+ static void process_op (OpCode op, InterpEnv<Number>& env)
+ {
+ switch (op) {
+ case OpCode_longintdict: /* 5-byte integer */
+ env.argStack.push_longint_from_substr (env.substr);
+ break;
+
+ case OpCode_BCD: /* real number */
+ env.argStack.push_real (parse_bcd (env.substr));
+ break;
+
+ default:
+ OpSet<Number>::process_op (op, env);
+ break;
+ }
+ }
+
+ static double parse_bcd (SubByteStr& substr)
+ {
+ bool neg = false;
+ double int_part = 0;
+ uint64_t frac_part = 0;
+ uint32_t frac_count = 0;
+ bool exp_neg = false;
+ uint32_t exp_part = 0;
+ bool exp_overflow = false;
+ enum Part { INT_PART=0, FRAC_PART, EXP_PART } part = INT_PART;
+ enum Nibble { DECIMAL=10, EXP_POS, EXP_NEG, RESERVED, NEG, END };
+ const uint64_t MAX_FRACT = 0xFFFFFFFFFFFFFull; /* 1^52-1 */
+ const uint32_t MAX_EXP = 0x7FFu; /* 1^11-1 */
+
+ double value = 0.0;
+ unsigned char byte = 0;
+ for (uint32_t i = 0;; i++)
+ {
+ char d;
+ if ((i & 1) == 0)
+ {
+ if (!substr.avail ())
+ {
+ substr.set_error ();
+ return 0.0;
+ }
+ byte = substr[0];
+ substr.inc ();
+ d = byte >> 4;
+ }
+ else
+ d = byte & 0x0F;
+
+ switch (d)
+ {
+ case RESERVED:
+ substr.set_error ();
+ return value;
+
+ case END:
+ value = (double)(neg? -int_part: int_part);
+ if (frac_count > 0)
+ {
+ double frac = (frac_part / pow (10.0, (double)frac_count));
+ if (neg) frac = -frac;
+ value += frac;
+ }
+ if (unlikely (exp_overflow))
+ {
+ if (value == 0.0)
+ return value;
+ if (exp_neg)
+ return neg? -DBL_MIN: DBL_MIN;
+ else
+ return neg? -DBL_MAX: DBL_MAX;
+ }
+ if (exp_part != 0)
+ {
+ if (exp_neg)
+ value /= pow (10.0, (double)exp_part);
+ else
+ value *= pow (10.0, (double)exp_part);
+ }
+ return value;
+
+ case NEG:
+ if (i != 0)
+ {
+ substr.set_error ();
+ return 0.0;
+ }
+ neg = true;
+ break;
+
+ case DECIMAL:
+ if (part != INT_PART)
+ {
+ substr.set_error ();
+ return value;
+ }
+ part = FRAC_PART;
+ break;
+
+ case EXP_NEG:
+ exp_neg = true;
+ HB_FALLTHROUGH;
+
+ case EXP_POS:
+ if (part == EXP_PART)
+ {
+ substr.set_error ();
+ return value;
+ }
+ part = EXP_PART;
+ break;
+
+ default:
+ switch (part) {
+ default:
+ case INT_PART:
+ int_part = (int_part * 10) + d;
+ break;
+
+ case FRAC_PART:
+ if (likely (frac_part <= MAX_FRACT / 10))
+ {
+ frac_part = (frac_part * 10) + (unsigned)d;
+ frac_count++;
+ }
+ break;
+
+ case EXP_PART:
+ if (likely (exp_part * 10 + d <= MAX_EXP))
+ {
+ exp_part = (exp_part * 10) + d;
+ }
+ else
+ exp_overflow = true;
+ break;
+ }
+ }
+ }
+
+ return value;
+ }
+
+ static bool is_hint_op (OpCode op)
+ {
+ switch (op)
+ {
+ case OpCode_BlueValues:
+ case OpCode_OtherBlues:
+ case OpCode_FamilyBlues:
+ case OpCode_FamilyOtherBlues:
+ case OpCode_StemSnapH:
+ case OpCode_StemSnapV:
+ case OpCode_StdHW:
+ case OpCode_StdVW:
+ case OpCode_BlueScale:
+ case OpCode_BlueShift:
+ case OpCode_BlueFuzz:
+ case OpCode_ForceBold:
+ case OpCode_LanguageGroup:
+ case OpCode_ExpansionFactor:
+ return true;
+ default:
+ return false;
+ }
+ }
+};
+
+template <typename VAL=OpStr>
+struct TopDictOpSet : DictOpSet
+{
+ static void process_op (OpCode op, InterpEnv<Number>& env, TopDictValues<VAL> & dictval)
+ {
+ switch (op) {
+ case OpCode_CharStrings:
+ dictval.charStringsOffset = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+ case OpCode_FDArray:
+ dictval.FDArrayOffset = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+ case OpCode_FontMatrix:
+ env.clear_args ();
+ break;
+ default:
+ DictOpSet::process_op (op, env);
+ break;
+ }
+ }
+};
+
+template <typename OPSET, typename PARAM, typename ENV=NumInterpEnv>
+struct DictInterpreter : Interpreter<ENV>
+{
+ bool interpret (PARAM& param)
+ {
+ param.init ();
+ while (SUPER::env.substr.avail ())
+ {
+ OPSET::process_op (SUPER::env.fetch_op (), SUPER::env, param);
+ if (unlikely (SUPER::env.in_error ()))
+ return false;
+ }
+
+ return true;
+ }
+
+ private:
+ typedef Interpreter<ENV> SUPER;
+};
+
+} /* namespace CFF */
+
+#endif /* HB_CFF_INTERP_DICT_COMMON_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff1-interp-cs.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff1-interp-cs.hh
new file mode 100644
index 00000000000..68e1d81d762
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff1-interp-cs.hh
@@ -0,0 +1,161 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+#ifndef HB_CFF1_INTERP_CS_HH
+#define HB_CFF1_INTERP_CS_HH
+
+#include "hb.hh"
+#include "hb-cff-interp-cs-common.hh"
+
+namespace CFF {
+
+using namespace OT;
+
+typedef BiasedSubrs<CFF1Subrs> CFF1BiasedSubrs;
+
+struct CFF1CSInterpEnv : CSInterpEnv<Number, CFF1Subrs>
+{
+ template <typename ACC>
+ void init (const ByteStr &str, ACC &acc, unsigned int fd)
+ {
+ SUPER::init (str, *acc.globalSubrs, *acc.privateDicts[fd].localSubrs);
+ processed_width = false;
+ has_width = false;
+ arg_start = 0;
+ in_seac = false;
+ }
+
+ void fini () { SUPER::fini (); }
+
+ void set_width (bool has_width_)
+ {
+ if (likely (!processed_width && (SUPER::argStack.get_count () > 0)))
+ {
+ if (has_width_)
+ {
+ width = SUPER::argStack[0];
+ has_width = true;
+ arg_start = 1;
+ }
+ }
+ processed_width = true;
+ }
+
+ void clear_args ()
+ {
+ arg_start = 0;
+ SUPER::clear_args ();
+ }
+
+ void set_in_seac (bool _in_seac) { in_seac = _in_seac; }
+
+ bool processed_width;
+ bool has_width;
+ unsigned int arg_start;
+ Number width;
+ bool in_seac;
+
+ private:
+ typedef CSInterpEnv<Number, CFF1Subrs> SUPER;
+};
+
+template <typename OPSET, typename PARAM, typename PATH=PathProcsNull<CFF1CSInterpEnv, PARAM> >
+struct CFF1CSOpSet : CSOpSet<Number, OPSET, CFF1CSInterpEnv, PARAM, PATH>
+{
+ /* PostScript-originated legacy opcodes (OpCode_add etc) are unsupported */
+ /* Type 1-originated deprecated opcodes, seac behavior of endchar and dotsection are supported */
+
+ static void process_op (OpCode op, CFF1CSInterpEnv &env, PARAM& param)
+ {
+ switch (op) {
+ case OpCode_dotsection:
+ SUPER::flush_args_and_op (op, env, param);
+ break;
+
+ case OpCode_endchar:
+ OPSET::check_width (op, env, param);
+ if (env.argStack.get_count () >= 4)
+ {
+ OPSET::process_seac (env, param);
+ }
+ OPSET::flush_args_and_op (op, env, param);
+ env.set_endchar (true);
+ break;
+
+ default:
+ SUPER::process_op (op, env, param);
+ }
+ }
+
+ static void check_width (OpCode op, CFF1CSInterpEnv &env, PARAM& param)
+ {
+ if (!env.processed_width)
+ {
+ bool has_width = false;
+ switch (op)
+ {
+ case OpCode_endchar:
+ case OpCode_hstem:
+ case OpCode_hstemhm:
+ case OpCode_vstem:
+ case OpCode_vstemhm:
+ case OpCode_hintmask:
+ case OpCode_cntrmask:
+ has_width = ((env.argStack.get_count () & 1) != 0);
+ break;
+ case OpCode_hmoveto:
+ case OpCode_vmoveto:
+ has_width = (env.argStack.get_count () > 1);
+ break;
+ case OpCode_rmoveto:
+ has_width = (env.argStack.get_count () > 2);
+ break;
+ default:
+ return;
+ }
+ env.set_width (has_width);
+ }
+ }
+
+ static void process_seac (CFF1CSInterpEnv &env, PARAM& param)
+ {
+ }
+
+ static void flush_args (CFF1CSInterpEnv &env, PARAM& param)
+ {
+ SUPER::flush_args (env, param);
+ env.clear_args (); /* pop off width */
+ }
+
+ private:
+ typedef CSOpSet<Number, OPSET, CFF1CSInterpEnv, PARAM, PATH> SUPER;
+};
+
+template <typename OPSET, typename PARAM>
+struct CFF1CSInterpreter : CSInterpreter<CFF1CSInterpEnv, OPSET, PARAM> {};
+
+} /* namespace CFF */
+
+#endif /* HB_CFF1_INTERP_CS_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff2-interp-cs.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff2-interp-cs.hh
new file mode 100644
index 00000000000..709bdefa1dc
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cff2-interp-cs.hh
@@ -0,0 +1,271 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+#ifndef HB_CFF2_INTERP_CS_HH
+#define HB_CFF2_INTERP_CS_HH
+
+#include "hb.hh"
+#include "hb-cff-interp-cs-common.hh"
+
+namespace CFF {
+
+using namespace OT;
+
+struct BlendArg : Number
+{
+ void init ()
+ {
+ Number::init ();
+ deltas.init ();
+ }
+
+ void fini ()
+ {
+ Number::fini ();
+ deltas.fini_deep ();
+ }
+
+ void set_int (int v) { reset_blends (); Number::set_int (v); }
+ void set_fixed (int32_t v) { reset_blends (); Number::set_fixed (v); }
+ void set_real (double v) { reset_blends (); Number::set_real (v); }
+
+ void set_blends (unsigned int numValues_, unsigned int valueIndex_,
+ unsigned int numBlends, hb_array_t<const BlendArg> blends_)
+ {
+ numValues = numValues_;
+ valueIndex = valueIndex_;
+ deltas.resize (numBlends);
+ for (unsigned int i = 0; i < numBlends; i++)
+ deltas[i] = blends_[i];
+ }
+
+ bool blending () const { return deltas.len > 0; }
+ void reset_blends ()
+ {
+ numValues = valueIndex = 0;
+ deltas.resize (0);
+ }
+
+ unsigned int numValues;
+ unsigned int valueIndex;
+ hb_vector_t<Number> deltas;
+};
+
+typedef InterpEnv<BlendArg> BlendInterpEnv;
+typedef BiasedSubrs<CFF2Subrs> CFF2BiasedSubrs;
+
+struct CFF2CSInterpEnv : CSInterpEnv<BlendArg, CFF2Subrs>
+{
+ template <typename ACC>
+ void init (const ByteStr &str, ACC &acc, unsigned int fd,
+ const int *coords_=nullptr, unsigned int num_coords_=0)
+ {
+ SUPER::init (str, *acc.globalSubrs, *acc.privateDicts[fd].localSubrs);
+
+ coords = coords_;
+ num_coords = num_coords_;
+ varStore = acc.varStore;
+ seen_blend = false;
+ seen_vsindex_ = false;
+ scalars.init ();
+ do_blend = (coords != nullptr) && num_coords && (varStore != &Null(CFF2VariationStore));
+ set_ivs (acc.privateDicts[fd].ivs);
+ }
+
+ void fini ()
+ {
+ scalars.fini ();
+ SUPER::fini ();
+ }
+
+ OpCode fetch_op ()
+ {
+ if (this->substr.avail ())
+ return SUPER::fetch_op ();
+
+ /* make up return or endchar op */
+ if (this->callStack.is_empty ())
+ return OpCode_endchar;
+ else
+ return OpCode_return;
+ }
+
+ const BlendArg& eval_arg (unsigned int i)
+ {
+ BlendArg &arg = argStack[i];
+ blend_arg (arg);
+ return arg;
+ }
+
+ const BlendArg& pop_arg ()
+ {
+ BlendArg &arg = argStack.pop ();
+ blend_arg (arg);
+ return arg;
+ }
+
+ void process_blend ()
+ {
+ if (!seen_blend)
+ {
+ region_count = varStore->varStore.get_region_index_count (get_ivs ());
+ if (do_blend)
+ {
+ scalars.resize (region_count);
+ varStore->varStore.get_scalars (get_ivs (),
+ (int *)coords, num_coords,
+ &scalars[0], region_count);
+ }
+ seen_blend = true;
+ }
+ }
+
+ void process_vsindex ()
+ {
+ unsigned int index = argStack.pop_uint ();
+ if (unlikely (seen_vsindex () || seen_blend))
+ {
+ set_error ();
+ }
+ else
+ {
+ set_ivs (index);
+ }
+ seen_vsindex_ = true;
+ }
+
+ unsigned int get_region_count () const { return region_count; }
+ void set_region_count (unsigned int region_count_) { region_count = region_count_; }
+ unsigned int get_ivs () const { return ivs; }
+ void set_ivs (unsigned int ivs_) { ivs = ivs_; }
+ bool seen_vsindex () const { return seen_vsindex_; }
+
+ protected:
+ void blend_arg (BlendArg &arg)
+ {
+ if (do_blend && arg.blending ())
+ {
+ if (likely (scalars.len == arg.deltas.len))
+ {
+ double v = arg.to_real ();
+ for (unsigned int i = 0; i < scalars.len; i++)
+ {
+ v += (double)scalars[i] * arg.deltas[i].to_real ();
+ }
+ arg.set_real (v);
+ arg.deltas.resize (0);
+ }
+ }
+ }
+
+ protected:
+ const int *coords;
+ unsigned int num_coords;
+ const CFF2VariationStore *varStore;
+ unsigned int region_count;
+ unsigned int ivs;
+ hb_vector_t<float> scalars;
+ bool do_blend;
+ bool seen_vsindex_;
+ bool seen_blend;
+
+ typedef CSInterpEnv<BlendArg, CFF2Subrs> SUPER;
+};
+template <typename OPSET, typename PARAM, typename PATH=PathProcsNull<CFF2CSInterpEnv, PARAM> >
+struct CFF2CSOpSet : CSOpSet<BlendArg, OPSET, CFF2CSInterpEnv, PARAM, PATH>
+{
+ static void process_op (OpCode op, CFF2CSInterpEnv &env, PARAM& param)
+ {
+ switch (op) {
+ case OpCode_callsubr:
+ case OpCode_callgsubr:
+ /* a subroutine number shoudln't be a blended value */
+ if (unlikely (env.argStack.peek ().blending ()))
+ {
+ env.set_error ();
+ break;
+ }
+ SUPER::process_op (op, env, param);
+ break;
+
+ case OpCode_blendcs:
+ OPSET::process_blend (env, param);
+ break;
+
+ case OpCode_vsindexcs:
+ if (unlikely (env.argStack.peek ().blending ()))
+ {
+ env.set_error ();
+ break;
+ }
+ OPSET::process_vsindex (env, param);
+ break;
+
+ default:
+ SUPER::process_op (op, env, param);
+ }
+ }
+
+ static void process_blend (CFF2CSInterpEnv &env, PARAM& param)
+ {
+ unsigned int n, k;
+
+ env.process_blend ();
+ k = env.get_region_count ();
+ n = env.argStack.pop_uint ();
+ /* copy the blend values into blend array of the default values */
+ unsigned int start = env.argStack.get_count () - ((k+1) * n);
+ /* let an obvious error case fail, but note CFF2 spec doesn't forbid n==0 */
+ if (unlikely (start > env.argStack.get_count ()))
+ {
+ env.set_error ();
+ return;
+ }
+ for (unsigned int i = 0; i < n; i++)
+ {
+ const hb_array_t<const BlendArg> blends = env.argStack.get_subarray (start + n + (i * k));
+ env.argStack[start + i].set_blends (n, i, k, blends);
+ }
+
+ /* pop off blend values leaving default values now adorned with blend values */
+ env.argStack.pop (k * n);
+ }
+
+ static void process_vsindex (CFF2CSInterpEnv &env, PARAM& param)
+ {
+ env.process_vsindex ();
+ env.clear_args ();
+ }
+
+ private:
+ typedef CSOpSet<BlendArg, OPSET, CFF2CSInterpEnv, PARAM, PATH> SUPER;
+};
+
+template <typename OPSET, typename PARAM>
+struct CFF2CSInterpreter : CSInterpreter<CFF2CSInterpEnv, OPSET, PARAM> {};
+
+} /* namespace CFF */
+
+#endif /* HB_CFF2_INTERP_CS_HH */
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 c3cffccb189..93f5b7939ca 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc
@@ -51,7 +51,7 @@
hb_atomic_int_t _hb_options;
void
-_hb_options_init (void)
+_hb_options_init ()
{
hb_options_union_t u;
u.i = 0;
@@ -247,11 +247,10 @@ struct hb_language_item_t {
struct hb_language_item_t *next;
hb_language_t lang;
- inline bool operator == (const char *s) const {
- return lang_equal (lang, s);
- }
+ bool operator == (const char *s) const
+ { return lang_equal (lang, s); }
- inline hb_language_item_t & operator = (const char *s) {
+ hb_language_item_t & operator = (const char *s) {
/* If a custom allocated is used calling strdup() pairs
badly with a call to the custom free() in fini() below.
Therefore don't call strdup(), implement its behavior.
@@ -268,7 +267,7 @@ struct hb_language_item_t {
return *this;
}
- void fini (void) { free ((void *) lang); }
+ void fini () { free ((void *) lang); }
};
@@ -278,7 +277,7 @@ static hb_atomic_ptr_t <hb_language_item_t> langs;
#if HB_USE_ATEXIT
static void
-free_langs (void)
+free_langs ()
{
retry:
hb_language_item_t *first_lang = langs;
@@ -404,7 +403,7 @@ hb_language_to_string (hb_language_t language)
* Since: 0.9.2
**/
hb_language_t
-hb_language_get_default (void)
+hb_language_get_default ()
{
static hb_atomic_ptr_t <hb_language_t> default_language;
@@ -668,7 +667,7 @@ hb_version (unsigned int *major,
* Since: 0.9.2
**/
const char *
-hb_version_string (void)
+hb_version_string ()
{
return HB_VERSION_STRING;
}
@@ -781,13 +780,13 @@ parse_uint32 (const char **pp, const char *end, uint32_t *pv)
#ifdef USE_XLOCALE
#if HB_USE_ATEXIT
-static void free_static_C_locale (void);
+static void free_static_C_locale ();
#endif
static struct hb_C_locale_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer (HB_LOCALE_T),
hb_C_locale_lazy_loader_t>
{
- static inline HB_LOCALE_T create (void)
+ static HB_LOCALE_T create ()
{
HB_LOCALE_T C_locale = HB_CREATE_LOCALE ("C");
@@ -797,11 +796,11 @@ static struct hb_C_locale_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer (HB
return C_locale;
}
- static inline void destroy (HB_LOCALE_T p)
+ static void destroy (HB_LOCALE_T p)
{
HB_FREE_LOCALE (p);
}
- static inline HB_LOCALE_T get_null (void)
+ static HB_LOCALE_T get_null ()
{
return nullptr;
}
@@ -809,14 +808,14 @@ static struct hb_C_locale_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer (HB
#if HB_USE_ATEXIT
static
-void free_static_C_locale (void)
+void free_static_C_locale ()
{
static_C_locale.free_instance ();
}
#endif
static HB_LOCALE_T
-get_C_locale (void)
+get_C_locale ()
{
return static_C_locale.get_unconst ();
}
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 918f649da6c..c181950d21d 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc
@@ -100,7 +100,7 @@ _hb_cg_font_release (void *data)
static CTFontDescriptorRef
-get_last_resort_font_desc (void)
+get_last_resort_font_desc ()
{
// TODO Handle allocation failures?
CTFontDescriptorRef last_resort = CTFontDescriptorCreateWithNameAndSize (CFSTR("LastResort"), 0);
@@ -598,7 +598,7 @@ _hb_coretext_shape (hb_shape_plan_t *shape_plan,
} else {
active_feature_t *feature = active_features.find (&event->feature);
if (feature)
- active_features.remove (feature - active_features);
+ active_features.remove (feature - active_features.arrayZ ());
}
}
}
@@ -1163,20 +1163,8 @@ struct hb_coretext_aat_face_data_t {};
hb_coretext_aat_face_data_t *
_hb_coretext_aat_shaper_face_data_create (hb_face_t *face)
{
- static const hb_tag_t tags[] = {HB_CORETEXT_TAG_MORX, HB_CORETEXT_TAG_MORT, HB_CORETEXT_TAG_KERX};
-
- for (unsigned int i = 0; i < ARRAY_LENGTH (tags); i++)
- {
- hb_blob_t *blob = face->reference_table (tags[i]);
- if (hb_blob_get_length (blob))
- {
- hb_blob_destroy (blob);
- return face->data.coretext ? (hb_coretext_aat_face_data_t *) HB_SHAPER_DATA_SUCCEEDED : nullptr;
- }
- hb_blob_destroy (blob);
- }
-
- return nullptr;
+ return hb_aat_layout_has_substitution (face) || hb_aat_layout_has_positioning (face) ?
+ (hb_coretext_aat_face_data_t *) HB_SHAPER_DATA_SUCCEEDED : nullptr;
}
void
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 f13cfddb9c5..41a85b58c10 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh
@@ -56,12 +56,12 @@ union hb_options_union_t {
static_assert ((sizeof (hb_atomic_int_t) >= sizeof (hb_options_union_t)), "");
HB_INTERNAL void
-_hb_options_init (void);
+_hb_options_init ();
extern HB_INTERNAL hb_atomic_int_t _hb_options;
static inline hb_options_t
-hb_options (void)
+hb_options ()
{
/* Make a local copy, so we can access bitfield threadsafely. */
hb_options_union_t u;
@@ -284,7 +284,7 @@ struct hb_auto_trace_t
_hb_debug_msg_va<max_level> (what, obj, func, true, plevel ? *plevel : 0, +1, message, ap);
va_end (ap);
}
- inline ~hb_auto_trace_t (void)
+ ~hb_auto_trace_t ()
{
_hb_warn_no_return<ret_t> (returned);
if (!returned) {
@@ -293,9 +293,9 @@ struct hb_auto_trace_t
if (plevel) --*plevel;
}
- inline ret_t ret (ret_t v,
- const char *func = "",
- unsigned int line = 0)
+ ret_t ret (ret_t v,
+ const char *func = "",
+ unsigned int line = 0)
{
if (unlikely (returned)) {
fprintf (stderr, "OUCH, double calls to return_trace(). This is a bug, please report.\n");
@@ -327,18 +327,18 @@ struct hb_auto_trace_t<0, ret_t>
const char *message,
...) HB_PRINTF_FUNC(6, 7) {}
- inline ret_t ret (ret_t v,
- const char *func HB_UNUSED = 0,
- unsigned int line HB_UNUSED = 0) { return v; }
+ ret_t ret (ret_t v,
+ const char *func HB_UNUSED = nullptr,
+ unsigned int line HB_UNUSED = 0) { return v; }
};
/* For disabled tracing; optimize out everything.
* https://github.com/harfbuzz/harfbuzz/pull/605 */
template <typename ret_t>
struct hb_no_trace_t {
- inline ret_t ret (ret_t v,
- const char *func HB_UNUSED = "",
- unsigned int line HB_UNUSED = 0) { return v; }
+ ret_t ret (ret_t v,
+ const char *func HB_UNUSED = "",
+ unsigned int line HB_UNUSED = 0) { return v; }
};
#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-deprecated.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-deprecated.h
index 9ceb264816c..4a5e702ffca 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-deprecated.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-deprecated.h
@@ -52,6 +52,7 @@ HB_BEGIN_DECLS
#ifndef HB_DISABLE_DEPRECATED
+
#define HB_SCRIPT_CANADIAN_ABORIGINAL HB_SCRIPT_CANADIAN_SYLLABICS
#define HB_BUFFER_FLAGS_DEFAULT HB_BUFFER_FLAG_DEFAULT
@@ -217,66 +218,6 @@ hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
hb_direction_t direction,
hb_position_t *x, hb_position_t *y);
-/* Like hb_ot_layout_table_find_script, but takes zero-terminated array of scripts to test */
-HB_EXTERN HB_DEPRECATED_FOR (hb_ot_layout_table_select_script) hb_bool_t
-hb_ot_layout_table_choose_script (hb_face_t *face,
- hb_tag_t table_tag,
- const hb_tag_t *script_tags,
- unsigned int *script_index,
- hb_tag_t *chosen_script);
-
-HB_EXTERN HB_DEPRECATED_FOR (hb_ot_layout_script_select_language) hb_bool_t
-hb_ot_layout_script_find_language (hb_face_t *face,
- hb_tag_t table_tag,
- unsigned int script_index,
- hb_tag_t language_tag,
- unsigned int *language_index);
-
-HB_EXTERN HB_DEPRECATED_FOR (hb_ot_tags_from_script_and_language) void
-hb_ot_tags_from_script (hb_script_t script,
- hb_tag_t *script_tag_1,
- hb_tag_t *script_tag_2);
-
-HB_EXTERN HB_DEPRECATED_FOR (hb_ot_tags_from_script_and_language) hb_tag_t
-hb_ot_tag_from_language (hb_language_t language);
-
-
-typedef unsigned int hb_ot_name_id_t; /* Since is in hb-ot.h */
-
-/**
- * HB_OT_VAR_NO_AXIS_INDEX:
- *
- * Since: 1.4.2
- * Deprecated: 2.2.0
- */
-#define HB_OT_VAR_NO_AXIS_INDEX 0xFFFFFFFFu
-
-/**
- * hb_ot_var_axis_t:
- *
- * Since: 1.4.2
- * Deprecated: 2.2.0
- */
-typedef struct hb_ot_var_axis_t
-{
- hb_tag_t tag;
- hb_ot_name_id_t name_id;
- float min_value;
- float default_value;
- float max_value;
-} hb_ot_var_axis_t;
-
-HB_EXTERN HB_DEPRECATED_FOR (hb_ot_var_get_axis_infos) unsigned int
-hb_ot_var_get_axes (hb_face_t *face,
- unsigned int start_offset,
- unsigned int *axes_count /* IN/OUT */,
- hb_ot_var_axis_t *axes_array /* OUT */);
-
-HB_EXTERN HB_DEPRECATED_FOR (hb_ot_var_find_axis_info) hb_bool_t
-hb_ot_var_find_axis (hb_face_t *face,
- hb_tag_t axis_tag,
- unsigned int *axis_index,
- hb_ot_var_axis_t *axis_info);
#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 f9b2d261a99..e93cf90a30f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc
@@ -35,9 +35,9 @@
* to override malloc/free, we will redefine new/delete so users
* won't need to do that by their own.
*/
-void* operator new (size_t size) { return malloc (size); }
-void* operator new [] (size_t size) { return malloc (size); }
-void operator delete (void* pointer) { free (pointer); }
+void* operator new (size_t size) { return malloc (size); }
+void* operator new [] (size_t size) { return malloc (size); }
+void operator delete (void* pointer) { free (pointer); }
void operator delete [] (void* pointer) { free (pointer); }
@@ -54,19 +54,19 @@ private:
IDWriteFontFileStream *mFontFileStream;
public:
DWriteFontFileLoader (IDWriteFontFileStream *fontFileStream)
- {
- mFontFileStream = fontFileStream;
- }
+ { mFontFileStream = fontFileStream; }
// IUnknown interface
- IFACEMETHOD (QueryInterface) (IID const& iid, OUT void** ppObject) { return S_OK; }
- IFACEMETHOD_ (ULONG, AddRef) () { return 1; }
+ IFACEMETHOD (QueryInterface) (IID const& iid, OUT void** ppObject)
+ { return S_OK; }
+ IFACEMETHOD_ (ULONG, AddRef) () { return 1; }
IFACEMETHOD_ (ULONG, Release) () { return 1; }
// IDWriteFontFileLoader methods
- virtual HRESULT STDMETHODCALLTYPE CreateStreamFromKey (void const* fontFileReferenceKey,
- uint32_t fontFileReferenceKeySize,
- OUT IDWriteFontFileStream** fontFileStream)
+ virtual HRESULT STDMETHODCALLTYPE
+ CreateStreamFromKey (void const* fontFileReferenceKey,
+ uint32_t fontFileReferenceKeySize,
+ OUT IDWriteFontFileStream** fontFileStream)
{
*fontFileStream = mFontFileStream;
return S_OK;
@@ -86,19 +86,20 @@ public:
}
// IUnknown interface
- IFACEMETHOD (QueryInterface) (IID const& iid, OUT void** ppObject) { return S_OK; }
- IFACEMETHOD_ (ULONG, AddRef) () { return 1; }
+ IFACEMETHOD (QueryInterface) (IID const& iid, OUT void** ppObject)
+ { return S_OK; }
+ IFACEMETHOD_ (ULONG, AddRef) () { return 1; }
IFACEMETHOD_ (ULONG, Release) () { return 1; }
// IDWriteFontFileStream methods
- virtual HRESULT STDMETHODCALLTYPE ReadFileFragment (void const** fragmentStart,
- UINT64 fileOffset,
- UINT64 fragmentSize,
- OUT void** fragmentContext)
+ virtual HRESULT STDMETHODCALLTYPE
+ ReadFileFragment (void const** fragmentStart,
+ UINT64 fileOffset,
+ UINT64 fragmentSize,
+ OUT void** fragmentContext)
{
// We are required to do bounds checking.
- if (fileOffset + fragmentSize > mSize)
- return E_FAIL;
+ if (fileOffset + fragmentSize > mSize) return E_FAIL;
// truncate the 64 bit fileOffset to size_t sized index into mData
size_t index = static_cast<size_t> (fileOffset);
@@ -109,18 +110,18 @@ public:
return S_OK;
}
- virtual void STDMETHODCALLTYPE ReleaseFileFragment (void* fragmentContext) { }
+ virtual void STDMETHODCALLTYPE
+ ReleaseFileFragment (void* fragmentContext) {}
- virtual HRESULT STDMETHODCALLTYPE GetFileSize (OUT UINT64* fileSize)
+ virtual HRESULT STDMETHODCALLTYPE
+ GetFileSize (OUT UINT64* fileSize)
{
*fileSize = mSize;
return S_OK;
}
- virtual HRESULT STDMETHODCALLTYPE GetLastWriteTime (OUT UINT64* lastWriteTime)
- {
- return E_NOTIMPL;
- }
+ virtual HRESULT STDMETHODCALLTYPE
+ GetLastWriteTime (OUT UINT64* lastWriteTime) { return E_NOTIMPL; }
};
@@ -147,17 +148,14 @@ _hb_directwrite_shaper_face_data_create (hb_face_t *face)
// TODO: factory and fontFileLoader should be cached separately
IDWriteFactory* dwriteFactory;
- DWriteCreateFactory (
- DWRITE_FACTORY_TYPE_SHARED,
- __uuidof (IDWriteFactory),
- (IUnknown**) &dwriteFactory
- );
+ DWriteCreateFactory (DWRITE_FACTORY_TYPE_SHARED, __uuidof (IDWriteFactory),
+ (IUnknown**) &dwriteFactory);
HRESULT hr;
hb_blob_t *blob = hb_face_reference_blob (face);
- DWriteFontFileStream *fontFileStream = new DWriteFontFileStream (
- (uint8_t *) hb_blob_get_data (blob, nullptr),
- hb_blob_get_length (blob));
+ DWriteFontFileStream *fontFileStream;
+ fontFileStream = new DWriteFontFileStream ((uint8_t *) hb_blob_get_data (blob, nullptr),
+ hb_blob_get_length (blob));
DWriteFontFileLoader *fontFileLoader = new DWriteFontFileLoader (fontFileStream);
dwriteFactory->RegisterFontFileLoader (fontFileLoader);
@@ -165,7 +163,7 @@ _hb_directwrite_shaper_face_data_create (hb_face_t *face)
IDWriteFontFile *fontFile;
uint64_t fontFileKey = 0;
hr = dwriteFactory->CreateCustomFontFileReference (&fontFileKey, sizeof (fontFileKey),
- fontFileLoader, &fontFile);
+ fontFileLoader, &fontFile);
#define FAIL(...) \
HB_STMT_START { \
@@ -188,7 +186,7 @@ _hb_directwrite_shaper_face_data_create (hb_face_t *face)
IDWriteFontFace *fontFace;
dwriteFactory->CreateFontFace (faceType, 1, &fontFile, 0,
- DWRITE_FONT_SIMULATIONS_NONE, &fontFace);
+ DWRITE_FONT_SIMULATIONS_NONE, &fontFace);
data->dwriteFactory = dwriteFactory;
data->fontFile = fontFile;
@@ -228,9 +226,7 @@ _hb_directwrite_shaper_face_data_destroy (hb_directwrite_face_data_t *data)
* shaper font data
*/
-struct hb_directwrite_font_data_t
-{
-};
+struct hb_directwrite_font_data_t {};
hb_directwrite_font_data_t *
_hb_directwrite_shaper_font_data_create (hb_font_t *font)
@@ -251,12 +247,12 @@ _hb_directwrite_shaper_font_data_destroy (hb_directwrite_font_data_t *data)
// Most of TextAnalysis is originally written by Bas Schouten for Mozilla project
// but now is relicensed to MIT for HarfBuzz use
-class TextAnalysis
- : public IDWriteTextAnalysisSource, public IDWriteTextAnalysisSink
+class TextAnalysis : public IDWriteTextAnalysisSource, public IDWriteTextAnalysisSink
{
public:
- IFACEMETHOD (QueryInterface) (IID const& iid, OUT void** ppObject) { return S_OK; }
+ IFACEMETHOD (QueryInterface) (IID const& iid, OUT void** ppObject)
+ { return S_OK; }
IFACEMETHOD_ (ULONG, AddRef) () { return 1; }
IFACEMETHOD_ (ULONG, Release) () { return 1; }
@@ -273,7 +269,7 @@ public:
uint8_t mBidiLevel;
bool mIsSideways;
- inline bool ContainsTextPosition (uint32_t aTextPosition) const
+ bool ContainsTextPosition (uint32_t aTextPosition) const
{
return aTextPosition >= mTextStart &&
aTextPosition < mTextStart + mTextLength;
@@ -283,16 +279,10 @@ public:
};
public:
- TextAnalysis (const wchar_t* text,
- uint32_t textLength,
- const wchar_t* localeName,
- DWRITE_READING_DIRECTION readingDirection)
- : mText (text)
- , mTextLength (textLength)
- , mLocaleName (localeName)
- , mReadingDirection (readingDirection)
- , mCurrentRun (nullptr) { };
-
+ TextAnalysis (const wchar_t* text, uint32_t textLength,
+ const wchar_t* localeName, DWRITE_READING_DIRECTION readingDirection)
+ : mText (text), mTextLength (textLength), mLocaleName (localeName),
+ mReadingDirection (readingDirection), mCurrentRun (nullptr) {}
~TextAnalysis ()
{
// delete runs, except mRunHead which is part of the TextAnalysis object
@@ -304,8 +294,8 @@ public:
}
}
- STDMETHODIMP GenerateResults (IDWriteTextAnalyzer* textAnalyzer,
- Run **runHead)
+ STDMETHODIMP
+ GenerateResults (IDWriteTextAnalyzer* textAnalyzer, Run **runHead)
{
// Analyzes the text using the script analyzer and returns
// the result as a series of runs.
@@ -330,9 +320,10 @@ public:
// IDWriteTextAnalysisSource implementation
- IFACEMETHODIMP GetTextAtPosition (uint32_t textPosition,
- OUT wchar_t const** textString,
- OUT uint32_t* textLength)
+ IFACEMETHODIMP
+ GetTextAtPosition (uint32_t textPosition,
+ OUT wchar_t const** textString,
+ OUT uint32_t* textLength)
{
if (textPosition >= mTextLength)
{
@@ -348,9 +339,10 @@ public:
return S_OK;
}
- IFACEMETHODIMP GetTextBeforePosition (uint32_t textPosition,
- OUT wchar_t const** textString,
- OUT uint32_t* textLength)
+ IFACEMETHODIMP
+ GetTextBeforePosition (uint32_t textPosition,
+ OUT wchar_t const** textString,
+ OUT uint32_t* textLength)
{
if (textPosition == 0 || textPosition > mTextLength)
{
@@ -368,19 +360,16 @@ public:
}
IFACEMETHODIMP_ (DWRITE_READING_DIRECTION)
- GetParagraphReadingDirection () { return mReadingDirection; }
+ GetParagraphReadingDirection () { return mReadingDirection; }
- IFACEMETHODIMP GetLocaleName (uint32_t textPosition,
- uint32_t* textLength,
- wchar_t const** localeName)
- {
- return S_OK;
- }
+ IFACEMETHODIMP GetLocaleName (uint32_t textPosition, uint32_t* textLength,
+ wchar_t const** localeName)
+ { return S_OK; }
IFACEMETHODIMP
- GetNumberSubstitution (uint32_t textPosition,
- OUT uint32_t* textLength,
- OUT IDWriteNumberSubstitution** numberSubstitution)
+ GetNumberSubstitution (uint32_t textPosition,
+ OUT uint32_t* textLength,
+ OUT IDWriteNumberSubstitution** numberSubstitution)
{
// We do not support number substitution.
*numberSubstitution = nullptr;
@@ -392,9 +381,8 @@ public:
// IDWriteTextAnalysisSink implementation
IFACEMETHODIMP
- SetScriptAnalysis (uint32_t textPosition,
- uint32_t textLength,
- DWRITE_SCRIPT_ANALYSIS const* scriptAnalysis)
+ SetScriptAnalysis (uint32_t textPosition, uint32_t textLength,
+ DWRITE_SCRIPT_ANALYSIS const* scriptAnalysis)
{
SetCurrentRun (textPosition);
SplitCurrentRun (textPosition);
@@ -408,19 +396,19 @@ public:
}
IFACEMETHODIMP
- SetLineBreakpoints (uint32_t textPosition,
- uint32_t textLength,
- const DWRITE_LINE_BREAKPOINT* lineBreakpoints) { return S_OK; }
+ SetLineBreakpoints (uint32_t textPosition,
+ uint32_t textLength,
+ const DWRITE_LINE_BREAKPOINT* lineBreakpoints)
+ { return S_OK; }
- IFACEMETHODIMP SetBidiLevel (uint32_t textPosition,
- uint32_t textLength,
- uint8_t explicitLevel,
- uint8_t resolvedLevel) { return S_OK; }
+ IFACEMETHODIMP SetBidiLevel (uint32_t textPosition, uint32_t textLength,
+ uint8_t explicitLevel, uint8_t resolvedLevel)
+ { return S_OK; }
IFACEMETHODIMP
- SetNumberSubstitution (uint32_t textPosition,
- uint32_t textLength,
- IDWriteNumberSubstitution* numberSubstitution) { return S_OK; }
+ SetNumberSubstitution (uint32_t textPosition, uint32_t textLength,
+ IDWriteNumberSubstitution* numberSubstitution)
+ { return S_OK; }
protected:
Run *FetchNextRun (IN OUT uint32_t* textLength)
@@ -520,11 +508,11 @@ static inline uint32_t hb_uint32_swap (const uint32_t v)
static hb_bool_t
_hb_directwrite_shape_full (hb_shape_plan_t *shape_plan,
- hb_font_t *font,
- hb_buffer_t *buffer,
- const hb_feature_t *features,
- unsigned int num_features,
- float lineWidth)
+ hb_font_t *font,
+ hb_buffer_t *buffer,
+ const hb_feature_t *features,
+ unsigned int num_features,
+ float lineWidth)
{
hb_face_t *face = font->face;
const hb_directwrite_face_data_t *face_data = face->data.directwrite;
@@ -580,9 +568,10 @@ _hb_directwrite_shape_full (hb_shape_plan_t *shape_plan,
// TODO: Handle TEST_DISABLE_OPTIONAL_LIGATURES
- DWRITE_READING_DIRECTION readingDirection = buffer->props.direction ?
- DWRITE_READING_DIRECTION_RIGHT_TO_LEFT :
- DWRITE_READING_DIRECTION_LEFT_TO_RIGHT;
+ DWRITE_READING_DIRECTION readingDirection;
+ readingDirection = buffer->props.direction ?
+ DWRITE_READING_DIRECTION_RIGHT_TO_LEFT :
+ DWRITE_READING_DIRECTION_LEFT_TO_RIGHT;
/*
* There's an internal 16-bit limit on some things inside the analyzer,
@@ -611,10 +600,8 @@ _hb_directwrite_shape_full (hb_shape_plan_t *shape_plan,
const wchar_t localeName[20] = {0};
if (buffer->props.language != nullptr)
- {
mbstowcs ((wchar_t*) localeName,
- hb_language_to_string (buffer->props.language), 20);
- }
+ hb_language_to_string (buffer->props.language), 20);
// TODO: it does work but doesn't care about ranges
DWRITE_TYPOGRAPHIC_FEATURES typographic_features;
@@ -625,27 +612,29 @@ _hb_directwrite_shape_full (hb_shape_plan_t *shape_plan,
for (unsigned int i = 0; i < num_features; ++i)
{
typographic_features.features[i].nameTag = (DWRITE_FONT_FEATURE_TAG)
- hb_uint32_swap (features[i].tag);
+ hb_uint32_swap (features[i].tag);
typographic_features.features[i].parameter = features[i].value;
}
}
- const DWRITE_TYPOGRAPHIC_FEATURES* dwFeatures =
- (const DWRITE_TYPOGRAPHIC_FEATURES*) &typographic_features;
+ const DWRITE_TYPOGRAPHIC_FEATURES* dwFeatures;
+ dwFeatures = (const DWRITE_TYPOGRAPHIC_FEATURES*) &typographic_features;
const uint32_t featureRangeLengths[] = { textLength };
//
- uint16_t* clusterMap = new uint16_t[textLength];
- DWRITE_SHAPING_TEXT_PROPERTIES* textProperties =
- new DWRITE_SHAPING_TEXT_PROPERTIES[textLength];
+ uint16_t* clusterMap;
+ clusterMap = new uint16_t[textLength];
+ DWRITE_SHAPING_TEXT_PROPERTIES* textProperties;
+ textProperties = new DWRITE_SHAPING_TEXT_PROPERTIES[textLength];
retry_getglyphs:
uint16_t* glyphIndices = new uint16_t[maxGlyphCount];
- DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProperties =
- new DWRITE_SHAPING_GLYPH_PROPERTIES[maxGlyphCount];
+ DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProperties;
+ glyphProperties = new DWRITE_SHAPING_GLYPH_PROPERTIES[maxGlyphCount];
hr = analyzer->GetGlyphs (textString, textLength, fontFace, false,
- isRightToLeft, &runHead->mScript, localeName, nullptr, &dwFeatures,
- featureRangeLengths, 1, maxGlyphCount, clusterMap, textProperties, glyphIndices,
- glyphProperties, &glyphCount);
+ isRightToLeft, &runHead->mScript, localeName,
+ nullptr, &dwFeatures, featureRangeLengths, 1,
+ maxGlyphCount, clusterMap, textProperties,
+ glyphIndices, glyphProperties, &glyphCount);
if (unlikely (hr == HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER)))
{
@@ -665,30 +654,28 @@ retry_getglyphs:
/* The -2 in the following is to compensate for possible
* alignment needed after the WORD array. sizeof (WORD) == 2. */
unsigned int glyphs_size = (scratch_size * sizeof (int) - 2)
- / (sizeof (WORD) +
- sizeof (DWRITE_SHAPING_GLYPH_PROPERTIES) +
- sizeof (int) +
- sizeof (DWRITE_GLYPH_OFFSET) +
- sizeof (uint32_t));
+ / (sizeof (WORD) +
+ sizeof (DWRITE_SHAPING_GLYPH_PROPERTIES) +
+ sizeof (int) +
+ sizeof (DWRITE_GLYPH_OFFSET) +
+ sizeof (uint32_t));
ALLOCATE_ARRAY (uint32_t, vis_clusters, glyphs_size);
#undef ALLOCATE_ARRAY
int fontEmSize = font->face->get_upem ();
- if (fontEmSize < 0)
- fontEmSize = -fontEmSize;
+ if (fontEmSize < 0) fontEmSize = -fontEmSize;
- if (fontEmSize < 0)
- fontEmSize = -fontEmSize;
+ if (fontEmSize < 0) fontEmSize = -fontEmSize;
double x_mult = (double) font->x_scale / fontEmSize;
double y_mult = (double) font->y_scale / fontEmSize;
- hr = analyzer->GetGlyphPlacements (textString,
- clusterMap, textProperties, textLength, glyphIndices,
- glyphProperties, glyphCount, fontFace, fontEmSize,
- false, isRightToLeft, &runHead->mScript, localeName,
- &dwFeatures, featureRangeLengths, 1,
- glyphAdvances, glyphOffsets);
+ hr = analyzer->GetGlyphPlacements (textString, clusterMap, textProperties,
+ textLength, glyphIndices, glyphProperties,
+ glyphCount, fontFace, fontEmSize,
+ false, isRightToLeft, &runHead->mScript, localeName,
+ &dwFeatures, featureRangeLengths, 1,
+ glyphAdvances, glyphOffsets);
if (FAILED (hr))
FAIL ("Analyzer failed to get glyph placements.");
@@ -698,12 +685,12 @@ retry_getglyphs:
if (analyzer1 && lineWidth)
{
-
DWRITE_JUSTIFICATION_OPPORTUNITY* justificationOpportunities =
new DWRITE_JUSTIFICATION_OPPORTUNITY[maxGlyphCount];
- hr = analyzer1->GetJustificationOpportunities (fontFace, fontEmSize,
- runHead->mScript, textLength, glyphCount, textString, clusterMap,
- glyphProperties, justificationOpportunities);
+ hr = analyzer1->GetJustificationOpportunities (fontFace, fontEmSize, runHead->mScript,
+ textLength, glyphCount, textString,
+ clusterMap, glyphProperties,
+ justificationOpportunities);
if (FAILED (hr))
FAIL ("Analyzer failed to get justification opportunities.");
@@ -711,15 +698,14 @@ retry_getglyphs:
float* justifiedGlyphAdvances = new float[maxGlyphCount];
DWRITE_GLYPH_OFFSET* justifiedGlyphOffsets = new DWRITE_GLYPH_OFFSET[glyphCount];
hr = analyzer1->JustifyGlyphAdvances (lineWidth, glyphCount, justificationOpportunities,
- glyphAdvances, glyphOffsets, justifiedGlyphAdvances, justifiedGlyphOffsets);
+ glyphAdvances, glyphOffsets, justifiedGlyphAdvances,
+ justifiedGlyphOffsets);
- if (FAILED (hr))
- FAIL ("Analyzer failed to get justified glyph advances.");
+ if (FAILED (hr)) FAIL ("Analyzer failed to get justify glyph advances.");
DWRITE_SCRIPT_PROPERTIES scriptProperties;
hr = analyzer1->GetScriptProperties (runHead->mScript, &scriptProperties);
- if (FAILED (hr))
- FAIL ("Analyzer failed to get script properties.");
+ if (FAILED (hr)) FAIL ("Analyzer failed to get script properties.");
uint32_t justificationCharacter = scriptProperties.justificationCharacter;
// if a script justificationCharacter is not space, it can have GetJustifiedGlyphs
@@ -729,14 +715,15 @@ retry_getglyphs:
retry_getjustifiedglyphs:
uint16_t* modifiedGlyphIndices = new uint16_t[maxGlyphCount];
float* modifiedGlyphAdvances = new float[maxGlyphCount];
- DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets =
- new DWRITE_GLYPH_OFFSET[maxGlyphCount];
+ DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets = new DWRITE_GLYPH_OFFSET[maxGlyphCount];
uint32_t actualGlyphsCount;
hr = analyzer1->GetJustifiedGlyphs (fontFace, fontEmSize, runHead->mScript,
- textLength, glyphCount, maxGlyphCount, clusterMap, glyphIndices,
- glyphAdvances, justifiedGlyphAdvances, justifiedGlyphOffsets,
- glyphProperties, &actualGlyphsCount, modifiedClusterMap, modifiedGlyphIndices,
- modifiedGlyphAdvances, modifiedGlyphOffsets);
+ textLength, glyphCount, maxGlyphCount,
+ clusterMap, glyphIndices, glyphAdvances,
+ justifiedGlyphAdvances, justifiedGlyphOffsets,
+ glyphProperties, &actualGlyphsCount,
+ modifiedClusterMap, modifiedGlyphIndices,
+ modifiedGlyphAdvances, modifiedGlyphOffsets);
if (hr == HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER))
{
@@ -776,7 +763,6 @@ retry_getglyphs:
}
delete [] justificationOpportunities;
-
}
/* Ok, we've got everything we need, now compose output buffer,
@@ -826,13 +812,11 @@ retry_getglyphs:
/* TODO vertical */
pos->x_advance = x_mult * (int32_t) info->mask;
- pos->x_offset =
- x_mult * (isRightToLeft ? -info->var1.i32 : info->var1.i32);
+ pos->x_offset = x_mult * (isRightToLeft ? -info->var1.i32 : info->var1.i32);
pos->y_offset = y_mult * info->var2.i32;
}
- if (isRightToLeft)
- hb_buffer_reverse (buffer);
+ if (isRightToLeft) hb_buffer_reverse (buffer);
delete [] clusterMap;
delete [] glyphIndices;
@@ -850,13 +834,13 @@ retry_getglyphs:
hb_bool_t
_hb_directwrite_shape (hb_shape_plan_t *shape_plan,
- hb_font_t *font,
- hb_buffer_t *buffer,
- const hb_feature_t *features,
- unsigned int num_features)
+ hb_font_t *font,
+ hb_buffer_t *buffer,
+ const hb_feature_t *features,
+ unsigned int num_features)
{
return _hb_directwrite_shape_full (shape_plan, font, buffer,
- features, num_features, 0);
+ features, num_features, 0);
}
/*
@@ -865,16 +849,17 @@ _hb_directwrite_shape (hb_shape_plan_t *shape_plan,
hb_bool_t
hb_directwrite_shape_experimental_width (hb_font_t *font,
- hb_buffer_t *buffer,
- const hb_feature_t *features,
- unsigned int num_features,
- float width)
+ hb_buffer_t *buffer,
+ const hb_feature_t *features,
+ unsigned int num_features,
+ float width)
{
static const char *shapers = "directwrite";
- hb_shape_plan_t *shape_plan = hb_shape_plan_create_cached (font->face,
- &buffer->props, features, num_features, &shapers);
+ hb_shape_plan_t *shape_plan;
+ shape_plan = hb_shape_plan_create_cached (font->face, &buffer->props,
+ features, num_features, &shapers);
hb_bool_t res = _hb_directwrite_shape_full (shape_plan, font, buffer,
- features, num_features, width);
+ features, num_features, width);
buffer->unsafe_to_break_all ();
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-dsalgs.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-dsalgs.hh
index 5773596019d..48ce9897d5e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-dsalgs.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-dsalgs.hh
@@ -46,7 +46,7 @@ template <typename T>
static inline HB_CONST_FUNC unsigned int
hb_popcount (T v)
{
-#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) && defined(__OPTIMIZE__)
+#if (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__)
if (sizeof (T) <= sizeof (unsigned int))
return __builtin_popcount (v);
@@ -89,7 +89,7 @@ hb_bit_storage (T v)
{
if (unlikely (!v)) return 0;
-#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
+#if (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__)
if (sizeof (T) <= sizeof (unsigned int))
return sizeof (unsigned int) * 8 - __builtin_clz (v);
@@ -163,7 +163,7 @@ hb_ctz (T v)
{
if (unlikely (!v)) return 0;
-#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
+#if (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__)
if (sizeof (T) <= sizeof (unsigned int))
return __builtin_ctz (v);
@@ -234,6 +234,15 @@ hb_ctz (T v)
* Tiny stuff.
*/
+template <typename T>
+static inline T* hb_addressof (T& arg)
+{
+ /* https://en.cppreference.com/w/cpp/memory/addressof */
+ return reinterpret_cast<T*>(
+ &const_cast<char&>(
+ reinterpret_cast<const volatile char&>(arg)));
+}
+
/* ASCII tag/character handling */
static inline bool ISALPHA (unsigned char c)
{ return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); }
@@ -287,11 +296,25 @@ hb_ceil_to_4 (unsigned int v)
return ((v - 1) | 3) + 1;
}
-template <typename T> class hb_assert_unsigned_t;
-template <> class hb_assert_unsigned_t<unsigned char> {};
-template <> class hb_assert_unsigned_t<unsigned short> {};
-template <> class hb_assert_unsigned_t<unsigned int> {};
-template <> class hb_assert_unsigned_t<unsigned long> {};
+template <typename T> struct hb_is_signed;
+template <> struct hb_is_signed<signed char> { enum { value = true }; };
+template <> struct hb_is_signed<signed short> { enum { value = true }; };
+template <> struct hb_is_signed<signed int> { enum { value = true }; };
+template <> struct hb_is_signed<signed long> { enum { value = true }; };
+template <> struct hb_is_signed<unsigned char> { enum { value = false }; };
+template <> struct hb_is_signed<unsigned short> { enum { value = false }; };
+template <> struct hb_is_signed<unsigned int> { enum { value = false }; };
+template <> struct hb_is_signed<unsigned long> { enum { value = false }; };
+/* We need to define hb_is_signed for the typedefs we use on pre-Visual
+ * Studio 2010 for the int8_t type, since __int8/__int64 is not considered
+ * the same as char/long. The previous lines will suffice for the other
+ * types, though. Note that somehow, unsigned __int8 is considered same
+ * as unsigned char.
+ * https://github.com/harfbuzz/harfbuzz/pull/1499
+ */
+#if defined(_MSC_VER) && (_MSC_VER < 1600)
+template <> struct hb_is_signed<__int8> { enum { value = true }; };
+#endif
template <typename T> static inline bool
hb_in_range (T u, T lo, T hi)
@@ -301,7 +324,7 @@ hb_in_range (T u, T lo, T hi)
* one right now. Declaring a variable won't work as HB_UNUSED
* is unusable on some platforms and unused types are less likely
* to generate a warning than unused variables. */
- static_assert ((sizeof (hb_assert_unsigned_t<T>) >= 0), "");
+ static_assert (!hb_is_signed<T>::value, "");
/* The casts below are important as if T is smaller than int,
* the subtract results will become a signed int! */
@@ -529,232 +552,28 @@ hb_codepoint_parse (const char *s, unsigned int len, int base, hb_codepoint_t *o
}
-struct hb_bytes_t
-{
- inline hb_bytes_t (void) : arrayZ (nullptr), len (0) {}
- inline hb_bytes_t (const char *bytes_, unsigned int len_) : arrayZ (bytes_), len (len_) {}
- inline hb_bytes_t (const void *bytes_, unsigned int len_) : arrayZ ((const char *) bytes_), len (len_) {}
- template <typename T>
- inline hb_bytes_t (const T& array) : arrayZ ((const char *) array.arrayZ), len (array.len * sizeof (array.arrayZ[0])) {}
-
- inline operator const void * (void) const { return arrayZ; }
- inline operator const char * (void) const { return arrayZ; }
-
- inline void free (void) { ::free ((void *) arrayZ); arrayZ = nullptr; len = 0; }
-
- inline int cmp (const hb_bytes_t &a) const
- {
- if (len != a.len)
- return (int) a.len - (int) len;
- return hb_memcmp (a.arrayZ, arrayZ, len);
- }
- static inline int cmp (const void *pa, const void *pb)
- {
- hb_bytes_t *a = (hb_bytes_t *) pa;
- hb_bytes_t *b = (hb_bytes_t *) pb;
- return b->cmp (*a);
- }
-
- const char *arrayZ;
- unsigned int len;
-};
-
-template <typename Type>
-struct hb_sorted_array_t;
-
-template <typename Type>
-struct hb_array_t
-{
- static_assert ((bool) (unsigned) hb_static_size (Type), "");
-
- inline hb_array_t (void) : arrayZ (nullptr), len (0) {}
- inline hb_array_t (const hb_array_t &o) : arrayZ (o.arrayZ), len (o.len) {}
- inline hb_array_t (Type *array_, unsigned int len_) : arrayZ (array_), len (len_) {}
-
- inline Type& operator [] (unsigned int i) const
- {
- if (unlikely (i >= len)) return Null(Type);
- return arrayZ[i];
- }
-
- template <typename T> inline operator T * (void) const { return arrayZ; }
-
- inline Type * operator & (void) const { return arrayZ; }
-
- inline unsigned int get_size (void) const { return len * sizeof (Type); }
-
- inline hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int *seg_count /* IN/OUT */) const
- {
- if (!seg_count) return hb_array_t<Type> ();
-
- unsigned int count = len;
- if (unlikely (start_offset > count))
- count = 0;
- else
- count -= start_offset;
- count = *seg_count = MIN (count, *seg_count);
- return hb_array_t<Type> (arrayZ + start_offset, count);
- }
- inline hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int seg_count) const
- { return sub_array (start_offset, &seg_count); }
-
- inline hb_bytes_t as_bytes (void) const
- { return hb_bytes_t (arrayZ, len * sizeof (Type)); }
-
- template <typename T>
- inline Type *lsearch (const T &x,
- Type *not_found = nullptr)
- {
- unsigned int count = len;
- for (unsigned int i = 0; i < count; i++)
- if (!this->arrayZ[i].cmp (x))
- return &this->arrayZ[i];
- return not_found;
- }
- template <typename T>
- inline const Type *lsearch (const T &x,
- const Type *not_found = nullptr) const
- {
- unsigned int count = len;
- for (unsigned int i = 0; i < count; i++)
- if (!this->arrayZ[i].cmp (x))
- return &this->arrayZ[i];
- return not_found;
- }
-
- inline hb_sorted_array_t<Type> qsort (int (*cmp)(const void*, const void*))
- {
- ::qsort (arrayZ, len, sizeof (Type), cmp);
- return hb_sorted_array_t<Type> (*this);
- }
- inline hb_sorted_array_t<Type> qsort (void)
- {
- ::qsort (arrayZ, len, sizeof (Type), Type::cmp);
- return hb_sorted_array_t<Type> (*this);
- }
- inline void qsort (unsigned int start, unsigned int end)
- {
- end = MIN (end, len);
- assert (start <= end);
- ::qsort (arrayZ + start, end - start, sizeof (Type), Type::cmp);
- }
-
- inline void free (void)
- { ::free ((void *) arrayZ); arrayZ = nullptr; len = 0; }
-
- template <typename hb_sanitize_context_t>
- inline bool sanitize (hb_sanitize_context_t *c) const
- { return c->check_array (arrayZ, len); }
-
- public:
- Type *arrayZ;
- unsigned int len;
-};
-template <typename T>
-inline hb_array_t<T> hb_array (T *array, unsigned int len)
-{ return hb_array_t<T> (array, len); }
-
-enum hb_bfind_not_found_t
-{
- HB_BFIND_NOT_FOUND_DONT_STORE,
- HB_BFIND_NOT_FOUND_STORE,
- HB_BFIND_NOT_FOUND_STORE_CLOSEST,
-};
-
-template <typename Type>
-struct hb_sorted_array_t : hb_array_t<Type>
-{
- inline hb_sorted_array_t (void) : hb_array_t<Type> () {}
- inline hb_sorted_array_t (const hb_array_t<Type> &o) : hb_array_t<Type> (o) {}
- inline hb_sorted_array_t (Type *array_, unsigned int len_) : hb_array_t<Type> (array_, len_) {}
-
- inline hb_sorted_array_t<Type> sub_array (unsigned int start_offset, unsigned int *seg_count /* IN/OUT */) const
- { return hb_sorted_array_t<Type> (((const hb_array_t<Type> *) (this))->sub_array (start_offset, seg_count)); }
- inline hb_sorted_array_t<Type> sub_array (unsigned int start_offset, unsigned int seg_count) const
- { return sub_array (start_offset, &seg_count); }
-
- template <typename T>
- inline Type *bsearch (const T &x, Type *not_found = nullptr)
- {
- unsigned int i;
- return bfind (x, &i) ? &this->arrayZ[i] : not_found;
- }
- template <typename T>
- inline const Type *bsearch (const T &x, const Type *not_found = nullptr) const
- {
- unsigned int i;
- return bfind (x, &i) ? &this->arrayZ[i] : not_found;
- }
- template <typename T>
- inline bool bfind (const T &x, unsigned int *i = nullptr,
- hb_bfind_not_found_t not_found = HB_BFIND_NOT_FOUND_DONT_STORE,
- unsigned int to_store = (unsigned int) -1) const
- {
- int min = 0, max = (int) this->len - 1;
- const Type *array = this->arrayZ;
- while (min <= max)
- {
- int mid = ((unsigned int) min + (unsigned int) max) / 2;
- int c = array[mid].cmp (x);
- if (c < 0)
- max = mid - 1;
- else if (c > 0)
- min = mid + 1;
- else
- {
- if (i)
- *i = mid;
- return true;
- }
- }
- if (i)
- {
- switch (not_found)
- {
- case HB_BFIND_NOT_FOUND_DONT_STORE:
- break;
-
- case HB_BFIND_NOT_FOUND_STORE:
- *i = to_store;
- break;
-
- case HB_BFIND_NOT_FOUND_STORE_CLOSEST:
- if (max < 0 || (max < (int) this->len && array[max].cmp (x) > 0))
- max++;
- *i = max;
- break;
- }
- }
- return false;
- }
-};
-template <typename T>
-inline hb_sorted_array_t<T> hb_sorted_array (T *array, unsigned int len)
-{ return hb_sorted_array_t<T> (array, len); }
-
-
struct HbOpOr
{
- static const bool passthru_left = true;
- static const bool passthru_right = true;
+ enum { passthru_left = true };
+ enum { passthru_right = true };
template <typename T> static void process (T &o, const T &a, const T &b) { o = a | b; }
};
struct HbOpAnd
{
- static const bool passthru_left = false;
- static const bool passthru_right = false;
+ enum { passthru_left = false };
+ enum { passthru_right = false };
template <typename T> static void process (T &o, const T &a, const T &b) { o = a & b; }
};
struct HbOpMinus
{
- static const bool passthru_left = true;
- static const bool passthru_right = false;
+ enum { passthru_left = true };
+ enum { passthru_right = false };
template <typename T> static void process (T &o, const T &a, const T &b) { o = a & ~b; }
};
struct HbOpXor
{
- static const bool passthru_left = true;
- static const bool passthru_right = true;
+ enum { passthru_left = true };
+ enum { passthru_right = true };
template <typename T> static void process (T &o, const T &a, const T &b) { o = a ^ b; }
};
@@ -767,13 +586,13 @@ struct HbOpXor
template <typename elt_t, unsigned int byte_size>
struct hb_vector_size_t
{
- inline elt_t& operator [] (unsigned int i) { return u.v[i]; }
- inline const elt_t& operator [] (unsigned int i) const { return u.v[i]; }
+ elt_t& operator [] (unsigned int i) { return u.v[i]; }
+ const elt_t& operator [] (unsigned int i) const { return u.v[i]; }
- inline void clear (unsigned char v = 0) { memset (this, v, sizeof (*this)); }
+ void clear (unsigned char v = 0) { memset (this, v, sizeof (*this)); }
template <class Op>
- inline hb_vector_size_t process (const hb_vector_size_t &o) const
+ hb_vector_size_t process (const hb_vector_size_t &o) const
{
hb_vector_size_t r;
#if HB_VECTOR_SIZE
@@ -786,13 +605,13 @@ struct hb_vector_size_t
Op::process (r.u.v[i], u.v[i], o.u.v[i]);
return r;
}
- inline hb_vector_size_t operator | (const hb_vector_size_t &o) const
+ hb_vector_size_t operator | (const hb_vector_size_t &o) const
{ return process<HbOpOr> (o); }
- inline hb_vector_size_t operator & (const hb_vector_size_t &o) const
+ hb_vector_size_t operator & (const hb_vector_size_t &o) const
{ return process<HbOpAnd> (o); }
- inline hb_vector_size_t operator ^ (const hb_vector_size_t &o) const
+ hb_vector_size_t operator ^ (const hb_vector_size_t &o) const
{ return process<HbOpXor> (o); }
- inline hb_vector_size_t operator ~ () const
+ hb_vector_size_t operator ~ () const
{
hb_vector_size_t r;
#if HB_VECTOR_SIZE && 0
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc
index 5b33784f45c..8bb8c512106 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc
@@ -224,7 +224,7 @@ hb_face_create (hb_blob_t *blob,
* Since: 0.9.2
**/
hb_face_t *
-hb_face_get_empty (void)
+hb_face_get_empty ()
{
return const_cast<hb_face_t *> (&Null(hb_face_t));
}
@@ -588,7 +588,7 @@ struct hb_face_builder_data_t
{
struct table_entry_t
{
- inline int cmp (hb_tag_t t) const
+ int cmp (hb_tag_t t) const
{
if (t < tag) return -1;
if (t > tag) return -1;
@@ -603,7 +603,7 @@ struct hb_face_builder_data_t
};
static hb_face_builder_data_t *
-_hb_face_builder_data_create (void)
+_hb_face_builder_data_create ()
{
hb_face_builder_data_t *data = (hb_face_builder_data_t *) calloc (1, sizeof (hb_face_builder_data_t));
if (unlikely (!data))
@@ -642,18 +642,13 @@ _hb_face_builder_data_reference_blob (hb_face_builder_data_t *data)
return nullptr;
hb_serialize_context_t c (buf, face_length);
+ c.propagate_error (data->tables);
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;
- Supplier<hb_tag_t> tags_supplier (&data->tables[0].tag, table_count, sizeof (data->tables[0]));
- 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);
+ bool ret = f->serialize_single (&c, sfnt_tag, data->tables.as_array ());
c.end_serialize ();
@@ -694,7 +689,7 @@ _hb_face_builder_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void
* Since: 1.9.0
**/
hb_face_t *
-hb_face_builder_create (void)
+hb_face_builder_create ()
{
hb_face_builder_data_t *data = _hb_face_builder_data_create ();
if (unlikely (!data)) return hb_face_get_empty ();
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.hh
index 0b672336f3e..68834baeb83 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.hh
@@ -67,7 +67,7 @@ struct hb_face_t
};
hb_atomic_ptr_t<plan_node_t> shape_plans;
- inline hb_blob_t *reference_table (hb_tag_t tag) const
+ hb_blob_t *reference_table (hb_tag_t tag) const
{
hb_blob_t *blob;
@@ -81,7 +81,7 @@ struct hb_face_t
return blob;
}
- inline HB_PURE_FUNC unsigned int get_upem (void) const
+ HB_PURE_FUNC unsigned int get_upem () const
{
unsigned int ret = upem.get_relaxed ();
if (unlikely (!ret))
@@ -91,7 +91,7 @@ struct hb_face_t
return ret;
}
- inline unsigned int get_num_glyphs (void) const
+ unsigned int get_num_glyphs () const
{
unsigned int ret = num_glyphs.get_relaxed ();
if (unlikely (ret == (unsigned int) -1))
@@ -100,8 +100,8 @@ struct hb_face_t
}
private:
- HB_INTERNAL unsigned int load_upem (void) const;
- HB_INTERNAL unsigned int load_num_glyphs (void) const;
+ HB_INTERNAL unsigned int load_upem () const;
+ HB_INTERNAL unsigned int load_num_glyphs () const;
};
DECLARE_NULL_INSTANCE (hb_face_t);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc
index 237b2a50929..0f0bcadc1b5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc
@@ -523,7 +523,7 @@ static const hb_font_funcs_t _hb_font_funcs_default = {
* Since: 0.9.2
**/
hb_font_funcs_t *
-hb_font_funcs_create (void)
+hb_font_funcs_create ()
{
hb_font_funcs_t *ffuncs;
@@ -545,7 +545,7 @@ hb_font_funcs_create (void)
* Since: 0.9.2
**/
hb_font_funcs_t *
-hb_font_funcs_get_empty (void)
+hb_font_funcs_get_empty ()
{
return const_cast<hb_font_funcs_t *> (&_hb_font_funcs_default);
}
@@ -1408,7 +1408,7 @@ hb_font_create_sub_font (hb_font_t *parent)
* Since: 0.9.2
**/
hb_font_t *
-hb_font_get_empty (void)
+hb_font_get_empty ()
{
return const_cast<hb_font_t *> (&Null(hb_font_t));
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.hh
index 73733b34bb3..aaa0fd91cac 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.hh
@@ -86,7 +86,7 @@ struct hb_font_funcs_t
#define HB_FONT_FUNC_IMPLEMENT(name) +1
HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
#undef HB_FONT_FUNC_IMPLEMENT
- ]) (void);
+ ]) ();
} get;
};
DECLARE_NULL_INSTANCE (hb_font_funcs_t);
@@ -127,40 +127,42 @@ struct hb_font_t
/* Convert from font-space to user-space */
- inline int dir_scale (hb_direction_t direction)
+ int dir_scale (hb_direction_t direction)
{ return HB_DIRECTION_IS_VERTICAL(direction) ? y_scale : x_scale; }
- inline hb_position_t em_scale_x (int16_t v) { return em_scale (v, x_scale); }
- inline hb_position_t em_scale_y (int16_t v) { return em_scale (v, y_scale); }
- inline hb_position_t em_scalef_x (float v) { return em_scalef (v, this->x_scale); }
- inline hb_position_t em_scalef_y (float v) { return em_scalef (v, this->y_scale); }
- inline float em_fscale_x (int16_t v) { return em_fscale (v, x_scale); }
- inline float em_fscale_y (int16_t v) { return em_fscale (v, y_scale); }
- inline hb_position_t em_scale_dir (int16_t v, hb_direction_t direction)
+ hb_position_t em_scale_x (int16_t v) { return em_scale (v, x_scale); }
+ hb_position_t em_scale_y (int16_t v) { return em_scale (v, y_scale); }
+ hb_position_t em_scalef_x (float v) { return em_scalef (v, this->x_scale); }
+ hb_position_t em_scalef_y (float v) { return em_scalef (v, this->y_scale); }
+ float em_fscale_x (int16_t v) { return em_fscale (v, x_scale); }
+ float em_fscale_y (int16_t v) { return em_fscale (v, y_scale); }
+ hb_position_t em_scale_dir (int16_t v, hb_direction_t direction)
{ return em_scale (v, dir_scale (direction)); }
/* Convert from parent-font user-space to our user-space */
- inline hb_position_t parent_scale_x_distance (hb_position_t v) {
+ hb_position_t parent_scale_x_distance (hb_position_t v)
+ {
if (unlikely (parent && parent->x_scale != x_scale))
return (hb_position_t) (v * (int64_t) this->x_scale / this->parent->x_scale);
return v;
}
- inline hb_position_t parent_scale_y_distance (hb_position_t v) {
+ hb_position_t parent_scale_y_distance (hb_position_t v)
+ {
if (unlikely (parent && parent->y_scale != y_scale))
return (hb_position_t) (v * (int64_t) this->y_scale / this->parent->y_scale);
return v;
}
- inline hb_position_t parent_scale_x_position (hb_position_t v) {
- return parent_scale_x_distance (v);
- }
- inline hb_position_t parent_scale_y_position (hb_position_t v) {
- return parent_scale_y_distance (v);
- }
+ hb_position_t parent_scale_x_position (hb_position_t v)
+ { return parent_scale_x_distance (v); }
+ hb_position_t parent_scale_y_position (hb_position_t v)
+ { return parent_scale_y_distance (v); }
- inline void parent_scale_distance (hb_position_t *x, hb_position_t *y) {
+ void parent_scale_distance (hb_position_t *x, hb_position_t *y)
+ {
*x = parent_scale_x_distance (*x);
*y = parent_scale_y_distance (*y);
}
- inline void parent_scale_position (hb_position_t *x, hb_position_t *y) {
+ void parent_scale_position (hb_position_t *x, hb_position_t *y)
+ {
*x = parent_scale_x_position (*x);
*y = parent_scale_y_position (*y);
}
@@ -174,14 +176,14 @@ struct hb_font_t
/* has_* ... */
#define HB_FONT_FUNC_IMPLEMENT(name) \
bool \
- has_##name##_func (void) \
+ has_##name##_func () \
{ \
hb_font_funcs_t *funcs = this->klass; \
unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); \
return has_func (i); \
} \
bool \
- has_##name##_func_set (void) \
+ has_##name##_func_set () \
{ \
hb_font_funcs_t *funcs = this->klass; \
unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); \
@@ -190,14 +192,14 @@ struct hb_font_t
HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
#undef HB_FONT_FUNC_IMPLEMENT
- inline hb_bool_t get_font_h_extents (hb_font_extents_t *extents)
+ hb_bool_t get_font_h_extents (hb_font_extents_t *extents)
{
memset (extents, 0, sizeof (*extents));
return klass->get.f.font_h_extents (this, user_data,
extents,
klass->user_data.font_h_extents);
}
- inline hb_bool_t get_font_v_extents (hb_font_extents_t *extents)
+ hb_bool_t get_font_v_extents (hb_font_extents_t *extents)
{
memset (extents, 0, sizeof (*extents));
return klass->get.f.font_v_extents (this, user_data,
@@ -205,13 +207,13 @@ struct hb_font_t
klass->user_data.font_v_extents);
}
- inline bool has_glyph (hb_codepoint_t unicode)
+ bool has_glyph (hb_codepoint_t unicode)
{
hb_codepoint_t glyph;
return get_nominal_glyph (unicode, &glyph);
}
- inline hb_bool_t get_nominal_glyph (hb_codepoint_t unicode,
+ hb_bool_t get_nominal_glyph (hb_codepoint_t unicode,
hb_codepoint_t *glyph)
{
*glyph = 0;
@@ -219,11 +221,11 @@ struct hb_font_t
unicode, glyph,
klass->user_data.nominal_glyph);
}
- inline unsigned int get_nominal_glyphs (unsigned int count,
- const hb_codepoint_t *first_unicode,
- unsigned int unicode_stride,
- hb_codepoint_t *first_glyph,
- unsigned int glyph_stride)
+ unsigned int get_nominal_glyphs (unsigned int count,
+ const hb_codepoint_t *first_unicode,
+ unsigned int unicode_stride,
+ hb_codepoint_t *first_glyph,
+ unsigned int glyph_stride)
{
return klass->get.f.nominal_glyphs (this, user_data,
count,
@@ -232,8 +234,8 @@ struct hb_font_t
klass->user_data.nominal_glyphs);
}
- inline hb_bool_t get_variation_glyph (hb_codepoint_t unicode, hb_codepoint_t variation_selector,
- hb_codepoint_t *glyph)
+ hb_bool_t get_variation_glyph (hb_codepoint_t unicode, hb_codepoint_t variation_selector,
+ hb_codepoint_t *glyph)
{
*glyph = 0;
return klass->get.f.variation_glyph (this, user_data,
@@ -241,25 +243,25 @@ struct hb_font_t
klass->user_data.variation_glyph);
}
- inline hb_position_t get_glyph_h_advance (hb_codepoint_t glyph)
+ hb_position_t get_glyph_h_advance (hb_codepoint_t glyph)
{
return klass->get.f.glyph_h_advance (this, user_data,
glyph,
klass->user_data.glyph_h_advance);
}
- inline hb_position_t get_glyph_v_advance (hb_codepoint_t glyph)
+ hb_position_t get_glyph_v_advance (hb_codepoint_t glyph)
{
return klass->get.f.glyph_v_advance (this, user_data,
glyph,
klass->user_data.glyph_v_advance);
}
- inline void get_glyph_h_advances (unsigned int count,
- const hb_codepoint_t *first_glyph,
- unsigned int glyph_stride,
- hb_position_t *first_advance,
- unsigned int advance_stride)
+ void get_glyph_h_advances (unsigned int count,
+ const hb_codepoint_t *first_glyph,
+ unsigned int glyph_stride,
+ hb_position_t *first_advance,
+ unsigned int advance_stride)
{
return klass->get.f.glyph_h_advances (this, user_data,
count,
@@ -268,11 +270,11 @@ struct hb_font_t
klass->user_data.glyph_h_advances);
}
- inline void get_glyph_v_advances (unsigned int count,
- const hb_codepoint_t *first_glyph,
- unsigned int glyph_stride,
- hb_position_t *first_advance,
- unsigned int advance_stride)
+ void get_glyph_v_advances (unsigned int count,
+ const hb_codepoint_t *first_glyph,
+ unsigned int glyph_stride,
+ hb_position_t *first_advance,
+ unsigned int advance_stride)
{
return klass->get.f.glyph_v_advances (this, user_data,
count,
@@ -281,7 +283,7 @@ struct hb_font_t
klass->user_data.glyph_v_advances);
}
- inline hb_bool_t get_glyph_h_origin (hb_codepoint_t glyph,
+ hb_bool_t get_glyph_h_origin (hb_codepoint_t glyph,
hb_position_t *x, hb_position_t *y)
{
*x = *y = 0;
@@ -290,8 +292,8 @@ struct hb_font_t
klass->user_data.glyph_h_origin);
}
- inline hb_bool_t get_glyph_v_origin (hb_codepoint_t glyph,
- hb_position_t *x, hb_position_t *y)
+ hb_bool_t get_glyph_v_origin (hb_codepoint_t glyph,
+ hb_position_t *x, hb_position_t *y)
{
*x = *y = 0;
return klass->get.f.glyph_v_origin (this, user_data,
@@ -299,21 +301,23 @@ struct hb_font_t
klass->user_data.glyph_v_origin);
}
- inline hb_position_t get_glyph_h_kerning (hb_codepoint_t left_glyph, hb_codepoint_t right_glyph)
+ hb_position_t get_glyph_h_kerning (hb_codepoint_t left_glyph,
+ hb_codepoint_t right_glyph)
{
return klass->get.f.glyph_h_kerning (this, user_data,
left_glyph, right_glyph,
klass->user_data.glyph_h_kerning);
}
- inline hb_position_t get_glyph_v_kerning (hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph)
+ hb_position_t get_glyph_v_kerning (hb_codepoint_t top_glyph,
+ hb_codepoint_t bottom_glyph)
{
return klass->get.f.glyph_v_kerning (this, user_data,
top_glyph, bottom_glyph,
klass->user_data.glyph_v_kerning);
}
- inline hb_bool_t get_glyph_extents (hb_codepoint_t glyph,
+ hb_bool_t get_glyph_extents (hb_codepoint_t glyph,
hb_glyph_extents_t *extents)
{
memset (extents, 0, sizeof (*extents));
@@ -323,7 +327,7 @@ struct hb_font_t
klass->user_data.glyph_extents);
}
- inline hb_bool_t get_glyph_contour_point (hb_codepoint_t glyph, unsigned int point_index,
+ hb_bool_t get_glyph_contour_point (hb_codepoint_t glyph, unsigned int point_index,
hb_position_t *x, hb_position_t *y)
{
*x = *y = 0;
@@ -333,8 +337,8 @@ struct hb_font_t
klass->user_data.glyph_contour_point);
}
- inline hb_bool_t get_glyph_name (hb_codepoint_t glyph,
- char *name, unsigned int size)
+ hb_bool_t get_glyph_name (hb_codepoint_t glyph,
+ char *name, unsigned int size)
{
if (size) *name = '\0';
return klass->get.f.glyph_name (this, user_data,
@@ -343,8 +347,8 @@ struct hb_font_t
klass->user_data.glyph_name);
}
- inline hb_bool_t get_glyph_from_name (const char *name, int len, /* -1 means nul-terminated */
- hb_codepoint_t *glyph)
+ hb_bool_t get_glyph_from_name (const char *name, int len, /* -1 means nul-terminated */
+ hb_codepoint_t *glyph)
{
*glyph = 0;
if (len == -1) len = strlen (name);
@@ -357,7 +361,7 @@ struct hb_font_t
/* A bit higher-level, and with fallback */
- inline void get_h_extents_with_fallback (hb_font_extents_t *extents)
+ void get_h_extents_with_fallback (hb_font_extents_t *extents)
{
if (!get_font_h_extents (extents))
{
@@ -366,7 +370,7 @@ struct hb_font_t
extents->line_gap = 0;
}
}
- inline void get_v_extents_with_fallback (hb_font_extents_t *extents)
+ void get_v_extents_with_fallback (hb_font_extents_t *extents)
{
if (!get_font_v_extents (extents))
{
@@ -376,8 +380,8 @@ struct hb_font_t
}
}
- inline void get_extents_for_direction (hb_direction_t direction,
- hb_font_extents_t *extents)
+ void get_extents_for_direction (hb_direction_t direction,
+ hb_font_extents_t *extents)
{
if (likely (HB_DIRECTION_IS_HORIZONTAL (direction)))
get_h_extents_with_fallback (extents);
@@ -385,9 +389,9 @@ struct hb_font_t
get_v_extents_with_fallback (extents);
}
- inline void get_glyph_advance_for_direction (hb_codepoint_t glyph,
- hb_direction_t direction,
- hb_position_t *x, hb_position_t *y)
+ void get_glyph_advance_for_direction (hb_codepoint_t glyph,
+ hb_direction_t direction,
+ hb_position_t *x, hb_position_t *y)
{
*x = *y = 0;
if (likely (HB_DIRECTION_IS_HORIZONTAL (direction)))
@@ -395,12 +399,12 @@ struct hb_font_t
else
*y = get_glyph_v_advance (glyph);
}
- inline void get_glyph_advances_for_direction (hb_direction_t direction,
- unsigned int count,
- const hb_codepoint_t *first_glyph,
- unsigned glyph_stride,
- hb_position_t *first_advance,
- unsigned advance_stride)
+ void get_glyph_advances_for_direction (hb_direction_t direction,
+ unsigned int count,
+ const hb_codepoint_t *first_glyph,
+ unsigned glyph_stride,
+ hb_position_t *first_advance,
+ unsigned advance_stride)
{
if (likely (HB_DIRECTION_IS_HORIZONTAL (direction)))
get_glyph_h_advances (count, first_glyph, glyph_stride, first_advance, advance_stride);
@@ -408,8 +412,8 @@ struct hb_font_t
get_glyph_v_advances (count, first_glyph, glyph_stride, first_advance, advance_stride);
}
- inline void guess_v_origin_minus_h_origin (hb_codepoint_t glyph,
- hb_position_t *x, hb_position_t *y)
+ void guess_v_origin_minus_h_origin (hb_codepoint_t glyph,
+ hb_position_t *x, hb_position_t *y)
{
*x = get_glyph_h_advance (glyph) / 2;
@@ -419,8 +423,8 @@ struct hb_font_t
*y = extents.ascender;
}
- inline void get_glyph_h_origin_with_fallback (hb_codepoint_t glyph,
- hb_position_t *x, hb_position_t *y)
+ void get_glyph_h_origin_with_fallback (hb_codepoint_t glyph,
+ hb_position_t *x, hb_position_t *y)
{
if (!get_glyph_h_origin (glyph, x, y) &&
get_glyph_v_origin (glyph, x, y))
@@ -430,8 +434,8 @@ struct hb_font_t
*x -= dx; *y -= dy;
}
}
- inline void get_glyph_v_origin_with_fallback (hb_codepoint_t glyph,
- hb_position_t *x, hb_position_t *y)
+ void get_glyph_v_origin_with_fallback (hb_codepoint_t glyph,
+ hb_position_t *x, hb_position_t *y)
{
if (!get_glyph_v_origin (glyph, x, y) &&
get_glyph_h_origin (glyph, x, y))
@@ -442,9 +446,9 @@ struct hb_font_t
}
}
- inline void get_glyph_origin_for_direction (hb_codepoint_t glyph,
- hb_direction_t direction,
- hb_position_t *x, hb_position_t *y)
+ void get_glyph_origin_for_direction (hb_codepoint_t glyph,
+ hb_direction_t direction,
+ hb_position_t *x, hb_position_t *y)
{
if (likely (HB_DIRECTION_IS_HORIZONTAL (direction)))
get_glyph_h_origin_with_fallback (glyph, x, y);
@@ -452,8 +456,8 @@ struct hb_font_t
get_glyph_v_origin_with_fallback (glyph, x, y);
}
- inline void add_glyph_h_origin (hb_codepoint_t glyph,
- hb_position_t *x, hb_position_t *y)
+ void add_glyph_h_origin (hb_codepoint_t glyph,
+ hb_position_t *x, hb_position_t *y)
{
hb_position_t origin_x, origin_y;
@@ -462,8 +466,8 @@ struct hb_font_t
*x += origin_x;
*y += origin_y;
}
- inline void add_glyph_v_origin (hb_codepoint_t glyph,
- hb_position_t *x, hb_position_t *y)
+ void add_glyph_v_origin (hb_codepoint_t glyph,
+ hb_position_t *x, hb_position_t *y)
{
hb_position_t origin_x, origin_y;
@@ -472,9 +476,9 @@ struct hb_font_t
*x += origin_x;
*y += origin_y;
}
- inline void add_glyph_origin_for_direction (hb_codepoint_t glyph,
- hb_direction_t direction,
- hb_position_t *x, hb_position_t *y)
+ void add_glyph_origin_for_direction (hb_codepoint_t glyph,
+ hb_direction_t direction,
+ hb_position_t *x, hb_position_t *y)
{
hb_position_t origin_x, origin_y;
@@ -484,8 +488,8 @@ struct hb_font_t
*y += origin_y;
}
- inline void subtract_glyph_h_origin (hb_codepoint_t glyph,
- hb_position_t *x, hb_position_t *y)
+ void subtract_glyph_h_origin (hb_codepoint_t glyph,
+ hb_position_t *x, hb_position_t *y)
{
hb_position_t origin_x, origin_y;
@@ -494,8 +498,8 @@ struct hb_font_t
*x -= origin_x;
*y -= origin_y;
}
- inline void subtract_glyph_v_origin (hb_codepoint_t glyph,
- hb_position_t *x, hb_position_t *y)
+ void subtract_glyph_v_origin (hb_codepoint_t glyph,
+ hb_position_t *x, hb_position_t *y)
{
hb_position_t origin_x, origin_y;
@@ -504,9 +508,9 @@ struct hb_font_t
*x -= origin_x;
*y -= origin_y;
}
- inline void subtract_glyph_origin_for_direction (hb_codepoint_t glyph,
- hb_direction_t direction,
- hb_position_t *x, hb_position_t *y)
+ void subtract_glyph_origin_for_direction (hb_codepoint_t glyph,
+ hb_direction_t direction,
+ hb_position_t *x, hb_position_t *y)
{
hb_position_t origin_x, origin_y;
@@ -516,9 +520,9 @@ struct hb_font_t
*y -= origin_y;
}
- inline void get_glyph_kerning_for_direction (hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
- hb_direction_t direction,
- hb_position_t *x, hb_position_t *y)
+ void get_glyph_kerning_for_direction (hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
+ hb_direction_t direction,
+ hb_position_t *x, hb_position_t *y)
{
if (likely (HB_DIRECTION_IS_HORIZONTAL (direction))) {
*y = 0;
@@ -529,9 +533,9 @@ struct hb_font_t
}
}
- inline hb_bool_t get_glyph_extents_for_origin (hb_codepoint_t glyph,
- hb_direction_t direction,
- hb_glyph_extents_t *extents)
+ hb_bool_t get_glyph_extents_for_origin (hb_codepoint_t glyph,
+ hb_direction_t direction,
+ hb_glyph_extents_t *extents)
{
hb_bool_t ret = get_glyph_extents (glyph, extents);
@@ -541,9 +545,9 @@ struct hb_font_t
return ret;
}
- inline hb_bool_t get_glyph_contour_point_for_origin (hb_codepoint_t glyph, unsigned int point_index,
- hb_direction_t direction,
- hb_position_t *x, hb_position_t *y)
+ hb_bool_t get_glyph_contour_point_for_origin (hb_codepoint_t glyph, unsigned int point_index,
+ hb_direction_t direction,
+ hb_position_t *x, hb_position_t *y)
{
hb_bool_t ret = get_glyph_contour_point (glyph, point_index, x, y);
@@ -554,7 +558,7 @@ struct hb_font_t
}
/* Generates gidDDD if glyph has no name. */
- inline void
+ void
glyph_to_string (hb_codepoint_t glyph,
char *s, unsigned int size)
{
@@ -565,7 +569,7 @@ struct hb_font_t
}
/* Parses gidDDD and uniUUUU strings automatically. */
- inline hb_bool_t
+ hb_bool_t
glyph_from_string (const char *s, int len, /* -1 means nul-terminated */
hb_codepoint_t *glyph)
{
@@ -595,21 +599,17 @@ struct hb_font_t
return false;
}
- inline hb_position_t em_scale (int16_t v, int scale)
+ hb_position_t em_scale (int16_t v, int scale)
{
int upem = face->get_upem ();
int64_t scaled = v * (int64_t) scale;
scaled += scaled >= 0 ? upem/2 : -upem/2; /* Round. */
return (hb_position_t) (scaled / upem);
}
- inline hb_position_t em_scalef (float v, int scale)
- {
- return (hb_position_t) round (v * scale / face->get_upem ());
- }
- inline float em_fscale (int16_t v, int scale)
- {
- return (float) v * scale / face->get_upem ();
- }
+ hb_position_t em_scalef (float v, int scale)
+ { return (hb_position_t) round (v * scale / face->get_upem ()); }
+ float em_fscale (int16_t v, int scale)
+ { return (float) v * scale / face->get_upem (); }
};
DECLARE_NULL_INSTANCE (hb_font_t);
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 633e0ecd2c8..5f6e3808756 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc
@@ -479,12 +479,12 @@ hb_ft_get_font_h_extents (hb_font_t *font HB_UNUSED,
}
#if HB_USE_ATEXIT
-static void free_static_ft_funcs (void);
+static void free_static_ft_funcs ();
#endif
static struct hb_ft_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ft_font_funcs_lazy_loader_t>
{
- static inline hb_font_funcs_t *create (void)
+ static hb_font_funcs_t *create ()
{
hb_font_funcs_t *funcs = hb_font_funcs_create ();
@@ -514,14 +514,14 @@ static struct hb_ft_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ft
#if HB_USE_ATEXIT
static
-void free_static_ft_funcs (void)
+void free_static_ft_funcs ()
{
static_ft_funcs.free_instance ();
}
#endif
static hb_font_funcs_t *
-_hb_ft_get_font_funcs (void)
+_hb_ft_get_font_funcs ()
{
return static_ft_funcs.get_unconst ();
}
@@ -745,13 +745,13 @@ hb_ft_font_create_referenced (FT_Face ft_face)
}
#if HB_USE_ATEXIT
-static void free_static_ft_library (void);
+static void free_static_ft_library ();
#endif
static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer (FT_Library),
hb_ft_library_lazy_loader_t>
{
- static inline FT_Library create (void)
+ static FT_Library create ()
{
FT_Library l;
if (FT_Init_FreeType (&l))
@@ -763,11 +763,11 @@ static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer (
return l;
}
- static inline void destroy (FT_Library l)
+ static void destroy (FT_Library l)
{
FT_Done_FreeType (l);
}
- static inline FT_Library get_null (void)
+ static FT_Library get_null ()
{
return nullptr;
}
@@ -775,14 +775,14 @@ static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer (
#if HB_USE_ATEXIT
static
-void free_static_ft_library (void)
+void free_static_ft_library ()
{
static_ft_library.free_instance ();
}
#endif
static FT_Library
-get_ft_library (void)
+get_ft_library ()
{
return static_ft_library.get_unconst ();
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-glib.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-glib.cc
index cb7e7096e34..576375460bc 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-glib.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-glib.cc
@@ -337,12 +337,12 @@ hb_glib_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
#if HB_USE_ATEXIT
-static void free_static_glib_funcs (void);
+static void free_static_glib_funcs ();
#endif
static struct hb_glib_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_t<hb_glib_unicode_funcs_lazy_loader_t>
{
- static inline hb_unicode_funcs_t *create (void)
+ static hb_unicode_funcs_t *create ()
{
hb_unicode_funcs_t *funcs = hb_unicode_funcs_create (nullptr);
@@ -365,14 +365,14 @@ static struct hb_glib_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader
#if HB_USE_ATEXIT
static
-void free_static_glib_funcs (void)
+void free_static_glib_funcs ()
{
static_glib_funcs.free_instance ();
}
#endif
hb_unicode_funcs_t *
-hb_glib_get_unicode_funcs (void)
+hb_glib_get_unicode_funcs ()
{
return static_glib_funcs.get_unconst ();
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-enums.cc.tmpl b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-enums.cc.tmpl
index e056df47891..e3a9a6b3fc0 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-enums.cc.tmpl
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-enums.cc.tmpl
@@ -46,7 +46,7 @@
/*** BEGIN value-header ***/
GType
-@enum_name@_get_type (void)
+@enum_name@_get_type ()
{
static gsize type_id = 0;
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 606727cd32d..7ef9dfc0295 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
@@ -43,7 +43,7 @@ HB_BEGIN_DECLS
/*** BEGIN value-header ***/
HB_EXTERN GType
-@enum_name@_get_type (void) G_GNUC_CONST;
+@enum_name@_get_type () 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.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-structs.cc
index 23ca43656d0..846240e9322 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-structs.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-structs.cc
@@ -51,7 +51,7 @@
#define HB_DEFINE_BOXED_TYPE(name,copy_func,free_func) \
GType \
-hb_gobject_##name##_get_type (void) \
+hb_gobject_##name##_get_type () \
{ \
static gsize type_id = 0; \
if (g_once_init_enter (&type_id)) { \
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-icu.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-icu.cc
index 287f863404d..c26c91d484a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-icu.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-icu.cc
@@ -302,12 +302,12 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
#if HB_USE_ATEXIT
-static void free_static_icu_funcs (void);
+static void free_static_icu_funcs ();
#endif
static struct hb_icu_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_t<hb_icu_unicode_funcs_lazy_loader_t>
{
- static inline hb_unicode_funcs_t *create (void)
+ static hb_unicode_funcs_t *create ()
{
void *user_data = nullptr;
#if U_ICU_VERSION_MAJOR_NUM >= 49
@@ -337,14 +337,14 @@ static struct hb_icu_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_
#if HB_USE_ATEXIT
static
-void free_static_icu_funcs (void)
+void free_static_icu_funcs ()
{
static_icu_funcs.free_instance ();
}
#endif
hb_unicode_funcs_t *
-hb_icu_get_unicode_funcs (void)
+hb_icu_get_unicode_funcs ()
{
return static_icu_funcs.get_unconst ();
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-iter.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-iter.hh
deleted file mode 100644
index 6fd6aed79a7..00000000000
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-iter.hh
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * 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_ITER_HH
-#define HB_ITER_HH
-
-#include "hb.hh"
-
-
-/* Unified iterator object.
- *
- * The goal of this template is to make the same iterator interface
- * available to all types, and make it very easy and compact to use.
- * Iterator objects are small, light-weight, objects that can be
- * copied by value. If the collection / object being iterated on
- * is writable, then the iterator points to lvalues, otherwise it
- * returns rvalues.
- *
- * The way to declare, initialize, and use iterators, eg.:
- *
- * Iter<const int *> s (src);
- * Iter<int *> t (dst);
- * for (; s && t; s++, t++)
- * *s = *t;
- */
-
-template <typename T>
-struct Iter;
-
-#if 0
-template <typename T>
-struct Iter
-{
- explicit inline Iter (const T &c);
-};
-#endif
-
-template <typename T>
-struct Iter<T *>
-{
- /* Type of items. */
- typedef T Value;
-
- /* Constructors. */
- inline Iter (T *array_, int length_) :
- array (array_), length (MAX (length_, 0)) {}
- template <unsigned int length_>
- explicit inline Iter (T (&array_)[length_]) :
- array (array_), length (length_) {}
-
- /* Emptiness. */
- explicit_operator inline operator bool (void) const { return bool (length); }
-
- /* Current item. */
- inline T &operator * (void)
- {
- if (unlikely (!length)) return CrapOrNull(T);
- return *array;
- }
- inline T &operator -> (void)
- {
- return (operator *);
- }
-
- /* Next. */
- inline Iter<T *> & operator ++ (void)
- {
- if (unlikely (!length)) return *this;
- array++;
- length--;
- return *this;
- }
- /* Might return void, or a copy of pre-increment iterator. */
- inline void operator ++ (int)
- {
- if (unlikely (!length)) return;
- array++;
- length--;
- }
-
- /* Some iterators might implement len(). */
- inline unsigned int len (void) const { return length; }
-
- /* Some iterators might implement fast-forward.
- * Only implement it if it's constant-time. */
- inline void operator += (unsigned int n)
- {
- n = MIN (n, length);
- array += n;
- length -= n;
- }
-
- /* Some iterators might implement random-access.
- * Only implement it if it's constant-time. */
- inline Iter<T *> & operator [] (unsigned int i)
- {
- if (unlikely (i >= length)) return CrapOrNull(T);
- return array[i];
- }
-
- private:
- T *array;
- unsigned int length;
-};
-
-/* XXX Remove
- * Just to test these compile. */
-static inline void
-m (void)
-{
- const int src[10] = {};
- int dst[20];
-
- Iter<const int *> s (src);
- Iter<const int *> s2 (src, 5);
- Iter<int *> t (dst);
-
- s2 = s;
-
- for (; s && t; ++s, ++t)
- {
- *t = *s;
- }
-}
-
-#endif /* HB_ITER_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-kern.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-kern.hh
index aa01b470f29..fd5bb9e45ef 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-kern.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-kern.hh
@@ -44,10 +44,10 @@ struct hb_kern_machine_t
crossStream (crossStream_) {}
HB_NO_SANITIZE_SIGNED_INTEGER_OVERFLOW
- inline void kern (hb_font_t *font,
- hb_buffer_t *buffer,
- hb_mask_t kern_mask,
- bool scale = true) const
+ void kern (hb_font_t *font,
+ hb_buffer_t *buffer,
+ hb_mask_t kern_mask,
+ bool scale = true) const
{
OT::hb_ot_apply_context_t c (1, font, buffer);
c.set_lookup_mask (kern_mask);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-machinery.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-machinery.hh
index 39e962936db..9d2ae95556b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-machinery.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-machinery.hh
@@ -32,7 +32,7 @@
#include "hb.hh"
#include "hb-blob.hh"
-#include "hb-iter.hh"
+#include "hb-array.hh"
#include "hb-vector.hh"
@@ -81,14 +81,14 @@ static inline Type& StructAfter(TObject &X)
/* Check _assertion in a method environment */
#define _DEFINE_INSTANCE_ASSERTION1(_line, _assertion) \
- inline void _instance_assertion_on_line_##_line (void) const \
+ void _instance_assertion_on_line_##_line () const \
{ static_assert ((_assertion), ""); }
# define _DEFINE_INSTANCE_ASSERTION0(_line, _assertion) _DEFINE_INSTANCE_ASSERTION1 (_line, _assertion)
# define DEFINE_INSTANCE_ASSERTION(_assertion) _DEFINE_INSTANCE_ASSERTION0 (__LINE__, _assertion)
/* Check that _code compiles in a method environment */
#define _DEFINE_COMPILES_ASSERTION1(_line, _code) \
- inline void _compiles_assertion_on_line_##_line (void) const \
+ void _compiles_assertion_on_line_##_line () const \
{ _code; }
# define _DEFINE_COMPILES_ASSERTION0(_line, _code) _DEFINE_COMPILES_ASSERTION1 (_line, _code)
# define DEFINE_COMPILES_ASSERTION(_code) _DEFINE_COMPILES_ASSERTION0 (__LINE__, _code)
@@ -96,7 +96,7 @@ static inline Type& StructAfter(TObject &X)
#define DEFINE_SIZE_STATIC(size) \
DEFINE_INSTANCE_ASSERTION (sizeof (*this) == (size)) \
- inline unsigned int get_size (void) const { return (size); } \
+ unsigned int get_size () const { return (size); } \
enum { null_size = (size) }; \
enum { min_size = (size) }; \
enum { static_size = (size) }
@@ -123,7 +123,7 @@ static inline Type& StructAfter(TObject &X)
enum { min_size = (size) }
#define DEFINE_SIZE_ARRAY_SIZED(size, array) \
- inline unsigned int get_size (void) const { return (size - (array).min_size + (array).get_size ()); } \
+ unsigned int get_size () const { return (size - (array).min_size + (array).get_size ()); } \
DEFINE_SIZE_ARRAY(size, array)
@@ -137,8 +137,9 @@ struct hb_dispatch_context_t
enum { max_debug_depth = MaxDebugDepth };
typedef Return return_t;
template <typename T, typename F>
- inline bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
- static return_t no_dispatch_return_value (void) { return Context::default_return_value (); }
+ bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
+ static return_t no_dispatch_return_value () { return Context::default_return_value (); }
+ static bool stop_sublookup_iteration (const return_t r HB_UNUSED) { return false; }
};
@@ -225,7 +226,7 @@ struct hb_dispatch_context_t
struct hb_sanitize_context_t :
hb_dispatch_context_t<hb_sanitize_context_t, bool, HB_DEBUG_SANITIZE>
{
- inline hb_sanitize_context_t (void) :
+ hb_sanitize_context_t () :
debug_depth (0),
start (nullptr), end (nullptr),
max_ops (0),
@@ -234,33 +235,33 @@ struct hb_sanitize_context_t :
num_glyphs (65536),
num_glyphs_set (false) {}
- inline const char *get_name (void) { return "SANITIZE"; }
+ const char *get_name () { return "SANITIZE"; }
template <typename T, typename F>
- inline bool may_dispatch (const T *obj HB_UNUSED, const F *format)
+ bool may_dispatch (const T *obj HB_UNUSED, const F *format)
{ return format->sanitize (this); }
template <typename T>
- inline return_t dispatch (const T &obj) { return obj.sanitize (this); }
- static return_t default_return_value (void) { return true; }
- static return_t no_dispatch_return_value (void) { return false; }
+ return_t dispatch (const T &obj) { return obj.sanitize (this); }
+ static return_t default_return_value () { return true; }
+ static return_t no_dispatch_return_value () { return false; }
bool stop_sublookup_iteration (const return_t r) const { return !r; }
- inline void init (hb_blob_t *b)
+ void init (hb_blob_t *b)
{
this->blob = hb_blob_reference (b);
this->writable = false;
}
- inline void set_num_glyphs (unsigned int num_glyphs_)
+ void set_num_glyphs (unsigned int num_glyphs_)
{
num_glyphs = num_glyphs_;
num_glyphs_set = true;
}
- inline unsigned int get_num_glyphs (void) { return num_glyphs; }
+ unsigned int get_num_glyphs () { return num_glyphs; }
- inline void set_max_ops (int max_ops_) { max_ops = max_ops_; }
+ void set_max_ops (int max_ops_) { max_ops = max_ops_; }
template <typename T>
- inline void set_object (const T *obj)
+ void set_object (const T *obj)
{
reset_object ();
@@ -279,14 +280,14 @@ struct hb_sanitize_context_t :
}
}
- inline void reset_object (void)
+ void reset_object ()
{
this->start = this->blob->data;
this->end = this->start + this->blob->length;
assert (this->start <= this->end); /* Must not overflow. */
}
- inline void start_processing (void)
+ void start_processing ()
{
reset_object ();
this->max_ops = MAX ((unsigned int) (this->end - this->start) * HB_SANITIZE_MAX_OPS_FACTOR,
@@ -300,7 +301,7 @@ struct hb_sanitize_context_t :
(unsigned long) (this->end - this->start));
}
- inline void end_processing (void)
+ void end_processing ()
{
DEBUG_MSG_LEVEL (SANITIZE, this->start, 0, -1,
"end [%p..%p] %u edit requests",
@@ -311,7 +312,7 @@ struct hb_sanitize_context_t :
this->start = this->end = nullptr;
}
- inline bool check_range (const void *base,
+ bool check_range (const void *base,
unsigned int len) const
{
const char *p = (const char *) base;
@@ -330,7 +331,7 @@ struct hb_sanitize_context_t :
}
template <typename T>
- inline bool check_range (const T *base,
+ bool check_range (const T *base,
unsigned int a,
unsigned int b) const
{
@@ -339,7 +340,7 @@ struct hb_sanitize_context_t :
}
template <typename T>
- inline bool check_range (const T *base,
+ bool check_range (const T *base,
unsigned int a,
unsigned int b,
unsigned int c) const
@@ -349,27 +350,24 @@ struct hb_sanitize_context_t :
}
template <typename T>
- inline bool check_array (const T *base,
- unsigned int len) const
+ bool check_array (const T *base, unsigned int len) const
{
- return this->check_range (base, len, T::static_size);
+ return this->check_range (base, len, hb_static_size (T));
}
template <typename T>
- inline bool check_array (const T *base,
- unsigned int a,
- unsigned int b) const
+ bool check_array (const T *base,
+ unsigned int a,
+ unsigned int b) const
{
- return this->check_range (base, a, b, T::static_size);
+ return this->check_range (base, a, b, hb_static_size (T));
}
template <typename Type>
- inline bool check_struct (const Type *obj) const
- {
- return likely (this->check_range (obj, obj->min_size));
- }
+ bool check_struct (const Type *obj) const
+ { return likely (this->check_range (obj, obj->min_size)); }
- inline bool may_edit (const void *base, unsigned int len)
+ bool may_edit (const void *base, unsigned int len)
{
if (this->edit_count >= HB_SANITIZE_MAX_EDITS)
return false;
@@ -388,16 +386,18 @@ struct hb_sanitize_context_t :
}
template <typename Type, typename ValueType>
- inline bool try_set (const Type *obj, const ValueType &v) {
- if (this->may_edit (obj, obj->static_size)) {
- const_cast<Type *> (obj)->set (v);
+ bool try_set (const Type *obj, const ValueType &v)
+ {
+ if (this->may_edit (obj, hb_static_size (Type)))
+ {
+ hb_assign (* const_cast<Type *> (obj), v);
return true;
}
return false;
}
template <typename Type>
- inline hb_blob_t *sanitize_blob (hb_blob_t *blob)
+ hb_blob_t *sanitize_blob (hb_blob_t *blob)
{
bool sane;
@@ -464,7 +464,7 @@ struct hb_sanitize_context_t :
}
template <typename Type>
- inline hb_blob_t *reference_table (const hb_face_t *face, hb_tag_t tableTag = Type::tableTag)
+ hb_blob_t *reference_table (const hb_face_t *face, hb_tag_t tableTag = Type::tableTag)
{
if (!num_glyphs_set)
set_num_glyphs (hb_face_get_glyph_count (face));
@@ -485,15 +485,11 @@ struct hb_sanitize_context_t :
struct hb_sanitize_with_object_t
{
template <typename T>
- inline hb_sanitize_with_object_t (hb_sanitize_context_t *c,
+ hb_sanitize_with_object_t (hb_sanitize_context_t *c,
const T& obj) : c (c)
- {
- c->set_object (obj);
- }
- inline ~hb_sanitize_with_object_t (void)
- {
- c->reset_object ();
- }
+ { c->set_object (obj); }
+ ~hb_sanitize_with_object_t ()
+ { c->reset_object (); }
private:
hb_sanitize_context_t *c;
@@ -506,25 +502,42 @@ struct hb_sanitize_with_object_t
struct hb_serialize_context_t
{
- inline hb_serialize_context_t (void *start_, unsigned int size)
+ hb_serialize_context_t (void *start_, unsigned int size)
{
this->start = (char *) start_;
this->end = this->start + size;
reset ();
}
- inline void reset (void)
+ bool in_error () const { return !this->successful; }
+
+ void reset ()
{
- this->ran_out_of_room = false;
+ this->successful = true;
this->head = this->start;
this->debug_depth = 0;
}
- inline bool err (bool e) { return this->ran_out_of_room = this->ran_out_of_room || e; }
+ bool propagate_error (bool e)
+ { return this->successful = this->successful && e; }
+ template <typename T> bool propagate_error (const T &obj)
+ { return this->successful = this->successful && !obj.in_error (); }
+ template <typename T> bool propagate_error (const T *obj)
+ { return this->successful = this->successful && !obj->in_error (); }
+ template <typename T1, typename T2> bool propagate_error (T1 &o1, T2 &o2)
+ { return propagate_error (o1) && propagate_error (o2); }
+ template <typename T1, typename T2> bool propagate_error (T1 *o1, T2 *o2)
+ { return propagate_error (o1) && propagate_error (o2); }
+ template <typename T1, typename T2, typename T3>
+ bool propagate_error (T1 &o1, T2 &o2, T3 &o3)
+ { return propagate_error (o1) && propagate_error (o2, o3); }
+ template <typename T1, typename T2, typename T3>
+ bool propagate_error (T1 *o1, T2 *o2, T3 *o3)
+ { return propagate_error (o1) && propagate_error (o2, o3); }
/* To be called around main operation. */
template <typename Type>
- inline Type *start_serialize (void)
+ Type *start_serialize ()
{
DEBUG_MSG_LEVEL (SERIALIZE, this->start, 0, +1,
"start [%p..%p] (%lu bytes)",
@@ -533,18 +546,18 @@ struct hb_serialize_context_t
return start_embed<Type> ();
}
- inline void end_serialize (void)
+ void end_serialize ()
{
DEBUG_MSG_LEVEL (SERIALIZE, this->start, 0, -1,
"end [%p..%p] serialized %d bytes; %s",
this->start, this->end,
(int) (this->head - this->start),
- this->ran_out_of_room ? "RAN OUT OF ROOM" : "did not ran out of room");
+ this->successful ? "successful" : "UNSUCCESSFUL");
}
- inline unsigned int length (void) const { return this->head - this->start; }
+ unsigned int length () const { return this->head - this->start; }
- inline void align (unsigned int alignment)
+ void align (unsigned int alignment)
{
unsigned int l = length () % alignment;
if (l)
@@ -552,17 +565,17 @@ struct hb_serialize_context_t
}
template <typename Type>
- inline Type *start_embed (void) const
+ Type *start_embed (const Type *_ HB_UNUSED = nullptr) const
{
Type *ret = reinterpret_cast<Type *> (this->head);
return ret;
}
template <typename Type>
- inline Type *allocate_size (unsigned int size)
+ Type *allocate_size (unsigned int size)
{
- if (unlikely (this->ran_out_of_room || this->end - this->head < ptrdiff_t (size))) {
- this->ran_out_of_room = true;
+ if (unlikely (!this->successful || this->end - this->head < ptrdiff_t (size))) {
+ this->successful = false;
return nullptr;
}
memset (this->head, 0, size);
@@ -572,13 +585,13 @@ struct hb_serialize_context_t
}
template <typename Type>
- inline Type *allocate_min (void)
+ Type *allocate_min ()
{
return this->allocate_size<Type> (Type::min_size);
}
template <typename Type>
- inline Type *embed (const Type &obj)
+ Type *embed (const Type &obj)
{
unsigned int size = obj.get_size ();
Type *ret = this->allocate_size<Type> (size);
@@ -586,50 +599,50 @@ struct hb_serialize_context_t
memcpy (ret, &obj, size);
return ret;
}
+ template <typename Type>
+ hb_serialize_context_t &operator << (const Type &obj) { embed (obj); return *this; }
template <typename Type>
- inline Type *extend_min (Type &obj)
+ Type *extend_size (Type &obj, unsigned int size)
{
- unsigned int size = obj.min_size;
- assert (this->start <= (char *) &obj && (char *) &obj <= this->head && (char *) &obj + size >= this->head);
+ assert (this->start <= (char *) &obj);
+ assert ((char *) &obj <= this->head);
+ assert ((char *) &obj + size >= this->head);
if (unlikely (!this->allocate_size<Type> (((char *) &obj) + size - this->head))) return nullptr;
return reinterpret_cast<Type *> (&obj);
}
template <typename Type>
- inline Type *extend (Type &obj)
- {
- unsigned int size = obj.get_size ();
- assert (this->start < (char *) &obj && (char *) &obj <= this->head && (char *) &obj + size >= this->head);
- if (unlikely (!this->allocate_size<Type> (((char *) &obj) + size - this->head))) return nullptr;
- return reinterpret_cast<Type *> (&obj);
- }
+ Type *extend_min (Type &obj) { return extend_size (obj, obj.min_size); }
+
+ template <typename Type>
+ Type *extend (Type &obj) { return extend_size (obj, obj.get_size ()); }
/* Output routines. */
template <typename Type>
- inline Type *copy (void) const
+ Type *copy () const
{
- assert (!this->ran_out_of_room);
+ assert (this->successful);
unsigned int len = this->head - this->start;
void *p = malloc (len);
if (p)
memcpy (p, this->start, len);
return reinterpret_cast<Type *> (p);
}
- inline hb_bytes_t copy_bytes (void) const
+ hb_bytes_t copy_bytes () const
{
- assert (!this->ran_out_of_room);
+ assert (this->successful);
unsigned int len = this->head - this->start;
void *p = malloc (len);
if (p)
memcpy (p, this->start, len);
else
return hb_bytes_t ();
- return hb_bytes_t (p, len);
+ return hb_bytes_t ((char *) p, len);
}
- inline hb_blob_t *copy_blob (void) const
+ hb_blob_t *copy_blob () const
{
- assert (!this->ran_out_of_room);
+ assert (this->successful);
return hb_blob_create (this->start,
this->head - this->start,
HB_MEMORY_MODE_DUPLICATE,
@@ -639,54 +652,10 @@ struct hb_serialize_context_t
public:
unsigned int debug_depth;
char *start, *end, *head;
- bool ran_out_of_room;
+ bool successful;
};
-/*
- * Supplier
- */
-
-template <typename Type>
-struct Supplier
-{
- inline Supplier (const Type *array, unsigned int len_, unsigned int stride_=sizeof (Type))
- {
- head = array;
- len = len_;
- stride = stride_;
- }
- inline Supplier (const hb_vector_t<Type> *v)
- {
- head = *v;
- len = v->len;
- stride = sizeof (Type);
- }
-
- inline const Type operator [] (unsigned int i) const
- {
- if (unlikely (i >= len)) return Type ();
- return * (const Type *) (const void *) ((const char *) head + stride * i);
- }
-
- inline Supplier<Type> & operator += (unsigned int count)
- {
- if (unlikely (count > len))
- count = len;
- len -= count;
- head = (const Type *) (const void *) ((const char *) head + stride * count);
- return *this;
- }
-
- private:
- inline Supplier (const Supplier<Type> &); /* Disallow copy */
- inline Supplier<Type>& operator= (const Supplier<Type> &); /* Disallow copy */
-
- unsigned int len;
- unsigned int stride;
- const Type *head;
-};
-
/*
* Big-endian integers.
@@ -699,14 +668,8 @@ struct BEInt<Type, 1>
{
public:
typedef Type type;
- inline void set (Type V)
- {
- v = V;
- }
- inline operator Type (void) const
- {
- return v;
- }
+ void set (Type V) { v = V; }
+ operator Type () const { return v; }
private: uint8_t v;
};
template <typename Type>
@@ -714,18 +677,24 @@ struct BEInt<Type, 2>
{
public:
typedef Type type;
- inline void set (Type V)
+ void set (Type V)
{
v[0] = (V >> 8) & 0xFF;
v[1] = (V ) & 0xFF;
}
- inline operator Type (void) const
+ operator Type () const
{
-#if defined(__GNUC__) || defined(__clang__)
+#if ((defined(__GNUC__) && __GNUC__ >= 5) || defined(__clang__)) && \
+ defined(__BYTE_ORDER) && \
+ (__BYTE_ORDER == __LITTLE_ENDIAN || __BYTE_ORDER == __BIG_ENDIAN)
/* Spoon-feed the compiler a big-endian integer with alignment 1.
* https://github.com/harfbuzz/harfbuzz/pull/1398 */
struct __attribute__((packed)) packed_uint16_t { uint16_t v; };
+#if __BYTE_ORDER == __LITTLE_ENDIAN
return __builtin_bswap16 (((packed_uint16_t *) this)->v);
+#else /* __BYTE_ORDER == __BIG_ENDIAN */
+ return ((packed_uint16_t *) this)->v;
+#endif
#endif
return (v[0] << 8)
+ (v[1] );
@@ -737,13 +706,13 @@ struct BEInt<Type, 3>
{
public:
typedef Type type;
- inline void set (Type V)
+ void set (Type V)
{
v[0] = (V >> 16) & 0xFF;
v[1] = (V >> 8) & 0xFF;
v[2] = (V ) & 0xFF;
}
- inline operator Type (void) const
+ operator Type () const
{
return (v[0] << 16)
+ (v[1] << 8)
@@ -756,14 +725,14 @@ struct BEInt<Type, 4>
{
public:
typedef Type type;
- inline void set (Type V)
+ void set (Type V)
{
v[0] = (V >> 24) & 0xFF;
v[1] = (V >> 16) & 0xFF;
v[2] = (V >> 8) & 0xFF;
v[3] = (V ) & 0xFF;
}
- inline operator Type (void) const
+ operator Type () const
{
return (v[0] << 24)
+ (v[1] << 16)
@@ -783,23 +752,21 @@ struct hb_data_wrapper_t
{
static_assert (WheresData > 0, "");
- inline Data * get_data (void) const
- {
- return *(((Data **) (void *) this) - WheresData);
- }
+ Data * get_data () const
+ { return *(((Data **) (void *) this) - WheresData); }
- inline bool is_inert (void) const { return !get_data (); }
+ bool is_inert () const { return !get_data (); }
template <typename Stored, typename Subclass>
- inline Stored * call_create (void) const { return Subclass::create (get_data ()); }
+ Stored * call_create () const { return Subclass::create (get_data ()); }
};
template <>
struct hb_data_wrapper_t<void, 0>
{
- inline bool is_inert (void) const { return false; }
+ bool is_inert () const { return false; }
template <typename Stored, typename Funcs>
- inline Stored * call_create (void) const { return Funcs::create (); }
+ Stored * call_create () const { return Funcs::create (); }
};
template <typename T1, typename T2> struct hb_non_void_t { typedef T1 value; };
@@ -816,13 +783,11 @@ struct hb_lazy_loader_t : hb_data_wrapper_t<Data, WheresData>
hb_lazy_loader_t<Returned,Subclass,Data,WheresData,Stored>
>::value Funcs;
- inline void init0 (void) {} /* Init, when memory is already set to 0. No-op for us. */
- inline void init (void) { instance.set_relaxed (nullptr); }
- inline void fini (void)
- {
- do_destroy (instance.get ());
- }
- inline void free_instance (void)
+ void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
+ void init () { instance.set_relaxed (nullptr); }
+ void fini () { do_destroy (instance.get ()); }
+
+ void free_instance ()
{
retry:
Stored *p = instance.get ();
@@ -831,19 +796,19 @@ struct hb_lazy_loader_t : hb_data_wrapper_t<Data, WheresData>
do_destroy (p);
}
- static inline void do_destroy (Stored *p)
+ static void do_destroy (Stored *p)
{
if (p && p != const_cast<Stored *> (Funcs::get_null ()))
Funcs::destroy (p);
}
- inline const Returned * operator -> (void) const { return get (); }
- inline const Returned & operator * (void) const { return *get (); }
- explicit_operator inline operator bool (void) const
+ const Returned * operator -> () const { return get (); }
+ const Returned & operator * () const { return *get (); }
+ explicit_operator bool () const
{ return get_stored () != Funcs::get_null (); }
- template <typename C> inline operator const C * (void) const { return get (); }
+ template <typename C> operator const C * () const { return get (); }
- inline Stored * get_stored (void) const
+ Stored * get_stored () const
{
retry:
Stored *p = this->instance.get ();
@@ -864,41 +829,41 @@ struct hb_lazy_loader_t : hb_data_wrapper_t<Data, WheresData>
}
return p;
}
- inline Stored * get_stored_relaxed (void) const
+ Stored * get_stored_relaxed () const
{
return this->instance.get_relaxed ();
}
- inline bool cmpexch (Stored *current, Stored *value) const
+ bool cmpexch (Stored *current, Stored *value) const
{
/* This *must* be called when there are no other threads accessing. */
return this->instance.cmpexch (current, value);
}
- inline const Returned * get (void) const { return Funcs::convert (get_stored ()); }
- inline const Returned * get_relaxed (void) const { return Funcs::convert (get_stored_relaxed ()); }
- inline Returned * get_unconst (void) const { return const_cast<Returned *> (Funcs::convert (get_stored ())); }
+ const Returned * get () const { return Funcs::convert (get_stored ()); }
+ const Returned * get_relaxed () const { return Funcs::convert (get_stored_relaxed ()); }
+ Returned * get_unconst () const { return const_cast<Returned *> (Funcs::convert (get_stored ())); }
/* To be possibly overloaded by subclasses. */
- static inline Returned* convert (Stored *p) { return p; }
+ static Returned* convert (Stored *p) { return p; }
/* By default null/init/fini the object. */
- static inline const Stored* get_null (void) { return &Null(Stored); }
- static inline Stored *create (Data *data)
+ static const Stored* get_null () { return &Null(Stored); }
+ static Stored *create (Data *data)
{
Stored *p = (Stored *) calloc (1, sizeof (Stored));
if (likely (p))
p->init (data);
return p;
}
- static inline Stored *create (void)
+ static Stored *create ()
{
Stored *p = (Stored *) calloc (1, sizeof (Stored));
if (likely (p))
p->init ();
return p;
}
- static inline void destroy (Stored *p)
+ static void destroy (Stored *p)
{
p->fini ();
free (p);
@@ -922,52 +887,34 @@ struct hb_table_lazy_loader_t : hb_lazy_loader_t<T,
hb_face_t, WheresFace,
hb_blob_t>
{
- static inline hb_blob_t *create (hb_face_t *face)
- {
- return hb_sanitize_context_t ().reference_table<T> (face);
- }
- static inline void destroy (hb_blob_t *p)
- {
- hb_blob_destroy (p);
- }
- static inline const hb_blob_t *get_null (void)
- {
- return hb_blob_get_empty ();
- }
- static inline const T* convert (const hb_blob_t *blob)
- {
- return blob->as<T> ();
- }
+ static hb_blob_t *create (hb_face_t *face)
+ { return hb_sanitize_context_t ().reference_table<T> (face); }
+ static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
- inline hb_blob_t* get_blob (void) const
- {
- return this->get_stored ();
- }
+ static const hb_blob_t *get_null ()
+ { return hb_blob_get_empty (); }
+
+ static const T* convert (const hb_blob_t *blob)
+ { return blob->as<T> (); }
+
+ hb_blob_t* get_blob () const { return this->get_stored (); }
};
template <typename Subclass>
struct hb_font_funcs_lazy_loader_t : hb_lazy_loader_t<hb_font_funcs_t, Subclass>
{
- static inline void destroy (hb_font_funcs_t *p)
- {
- hb_font_funcs_destroy (p);
- }
- static inline const hb_font_funcs_t *get_null (void)
- {
- return hb_font_funcs_get_empty ();
- }
+ static void destroy (hb_font_funcs_t *p)
+ { hb_font_funcs_destroy (p); }
+ static const hb_font_funcs_t *get_null ()
+ { return hb_font_funcs_get_empty (); }
};
template <typename Subclass>
struct hb_unicode_funcs_lazy_loader_t : hb_lazy_loader_t<hb_unicode_funcs_t, Subclass>
{
- static inline void destroy (hb_unicode_funcs_t *p)
- {
- hb_unicode_funcs_destroy (p);
- }
- static inline const hb_unicode_funcs_t *get_null (void)
- {
- return hb_unicode_funcs_get_empty ();
- }
+ static void destroy (hb_unicode_funcs_t *p)
+ { hb_unicode_funcs_destroy (p); }
+ static const hb_unicode_funcs_t *get_null ()
+ { return hb_unicode_funcs_get_empty (); }
};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.cc
index 067a2b37169..a2c770c586d 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.cc
@@ -47,7 +47,7 @@
* Since: 1.7.7
**/
hb_map_t *
-hb_map_create (void)
+hb_map_create ()
{
hb_map_t *map;
@@ -67,7 +67,7 @@ hb_map_create (void)
* Since: 1.7.7
**/
hb_map_t *
-hb_map_get_empty (void)
+hb_map_get_empty ()
{
return const_cast<hb_map_t *> (&Null(hb_map_t));
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.hh
index c54c9d7b640..3b119daa8e2 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.hh
@@ -45,16 +45,16 @@ inline uint32_t Hash (const T &v)
struct hb_map_t
{
HB_NO_COPY_ASSIGN (hb_map_t);
- inline hb_map_t (void) { init (); }
- inline ~hb_map_t (void) { fini (); }
+ hb_map_t () { init (); }
+ ~hb_map_t () { fini (); }
struct item_t
{
hb_codepoint_t key;
hb_codepoint_t value;
- inline bool is_unused (void) const { return key == INVALID; }
- inline bool is_tombstone (void) const { return key != INVALID && value == INVALID; }
+ bool is_unused () const { return key == INVALID; }
+ bool is_tombstone () const { return key != INVALID && value == INVALID; }
};
hb_object_header_t header;
@@ -65,7 +65,7 @@ struct hb_map_t
unsigned int prime;
item_t *items;
- inline void init_shallow (void)
+ void init_shallow ()
{
successful = true;
population = occupancy = 0;
@@ -73,24 +73,26 @@ struct hb_map_t
prime = 0;
items = nullptr;
}
- inline void init (void)
+ void init ()
{
hb_object_init (this);
init_shallow ();
}
- inline void fini_shallow (void)
+ void fini_shallow ()
{
free (items);
items = nullptr;
}
- inline void fini (void)
+ void fini ()
{
population = occupancy = 0;
hb_object_fini (this);
fini_shallow ();
}
- inline bool resize (void)
+ bool in_error () const { return !successful; }
+
+ bool resize ()
{
if (unlikely (!successful)) return false;
@@ -124,7 +126,7 @@ struct hb_map_t
return true;
}
- inline void set (hb_codepoint_t key, hb_codepoint_t value)
+ void set (hb_codepoint_t key, hb_codepoint_t value)
{
if (unlikely (!successful)) return;
if (unlikely (key == INVALID)) return;
@@ -149,46 +151,36 @@ struct hb_map_t
population++;
}
- inline hb_codepoint_t get (hb_codepoint_t key) const
+ hb_codepoint_t get (hb_codepoint_t key) const
{
if (unlikely (!items)) return INVALID;
unsigned int i = bucket_for (key);
return items[i].key == key ? items[i].value : INVALID;
}
- inline void del (hb_codepoint_t key)
- {
- set (key, INVALID);
- }
- inline bool has (hb_codepoint_t key) const
- {
- return get (key) != INVALID;
- }
+ void del (hb_codepoint_t key) { set (key, INVALID); }
- inline hb_codepoint_t operator [] (unsigned int key) const
+ bool has (hb_codepoint_t key) const
+ { return get (key) != INVALID; }
+
+ hb_codepoint_t operator [] (unsigned int key) const
{ return get (key); }
- static const hb_codepoint_t INVALID = HB_MAP_VALUE_INVALID;
+ enum { INVALID = HB_MAP_VALUE_INVALID };
- inline void clear (void)
+ void clear ()
{
memset (items, 0xFF, ((size_t) mask + 1) * sizeof (item_t));
population = occupancy = 0;
}
- inline bool is_empty (void) const
- {
- return population == 0;
- }
+ bool is_empty () const { return population == 0; }
- inline unsigned int get_population () const
- {
- return population;
- }
+ unsigned int get_population () const { return population; }
protected:
- inline unsigned int bucket_for (hb_codepoint_t key) const
+ unsigned int bucket_for (hb_codepoint_t key) const
{
unsigned int i = Hash (key) % prime;
unsigned int step = 0;
@@ -204,7 +196,7 @@ struct hb_map_t
return tombstone == INVALID ? i : tombstone;
}
- static inline unsigned int prime_for (unsigned int shift)
+ static unsigned int prime_for (unsigned int shift)
{
/* Following comment and table copied from glib. */
/* Each table size has an associated prime modulo (the first prime
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-mutex.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-mutex.hh
index b529091d44a..35f1fded1ef 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-mutex.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-mutex.hh
@@ -131,16 +131,16 @@ struct hb_mutex_t
hb_mutex_impl_t m;
- inline void init (void) { hb_mutex_impl_init (&m); }
- inline void lock (void) { hb_mutex_impl_lock (&m); }
- inline void unlock (void) { hb_mutex_impl_unlock (&m); }
- inline void fini (void) { hb_mutex_impl_finish (&m); }
+ void init () { hb_mutex_impl_init (&m); }
+ void lock () { hb_mutex_impl_lock (&m); }
+ void unlock () { hb_mutex_impl_unlock (&m); }
+ void fini () { hb_mutex_impl_finish (&m); }
};
struct hb_lock_t
{
- inline hb_lock_t (hb_mutex_t &mutex_) : mutex (mutex_) { mutex.lock (); }
- inline ~hb_lock_t (void) { mutex.unlock (); }
+ hb_lock_t (hb_mutex_t &mutex_) : mutex (mutex_) { mutex.lock (); }
+ ~hb_lock_t () { mutex.unlock (); }
private:
hb_mutex_t &mutex;
};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-null.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-null.hh
index 1583d5b90e0..8a3e0d4056e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-null.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-null.hh
@@ -36,7 +36,7 @@
/* Global nul-content Null pool. Enlarge as necessary. */
-#define HB_NULL_POOL_SIZE 1024
+#define HB_NULL_POOL_SIZE 9880
/* Use SFINAE to sniff whether T has min_size; in which case return T::null_size,
* otherwise return sizeof(T). */
@@ -59,7 +59,10 @@ struct hb_null_size
{ enum { value = _hb_null_size<T, _hb_bool_type<true> >::value }; };
#define hb_null_size(T) hb_null_size<T>::value
-/* This doesn't belong here, but since is copy/paste from above, put it here. */
+/* These doesn't belong here, but since is copy/paste from above, put it here. */
+
+/* hb_static_size (T)
+ * Returns T::static_size if T::min_size is defined, or sizeof (T) otherwise. */
template <typename T, typename B>
struct _hb_static_size
@@ -74,26 +77,52 @@ struct hb_static_size
#define hb_static_size(T) hb_static_size<T>::value
+/* hb_assign (obj, value)
+ * Calls obj.set (value) if obj.min_size is defined and value has different type
+ * from obj, or obj = v otherwise. */
+
+template <typename T, typename V, typename B>
+struct _hb_assign
+{ static inline void value (T &o, const V v) { o = v; } };
+template <typename T, typename V>
+struct _hb_assign<T, V, _hb_bool_type<(bool) (1 + (unsigned int) T::min_size)> >
+{ static inline void value (T &o, const V v) { o.set (v); } };
+template <typename T>
+struct _hb_assign<T, T, _hb_bool_type<(bool) (1 + (unsigned int) T::min_size)> >
+{ static inline void value (T &o, const T v) { o = v; } };
+
+template <typename T, typename V>
+static inline void hb_assign (T &o, const V v)
+{ _hb_assign<T, V, _hb_bool_type<true> >::value (o, v); };
+
+
/*
* Null()
*/
+
extern HB_INTERNAL
hb_vector_size_impl_t const _hb_NullPool[(HB_NULL_POOL_SIZE + sizeof (hb_vector_size_impl_t) - 1) / sizeof (hb_vector_size_impl_t)];
/* Generic nul-content Null objects. */
template <typename Type>
-static inline Type const & Null (void) {
+static inline Type const & Null () {
static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
return *reinterpret_cast<Type const *> (_hb_NullPool);
}
-#define Null(Type) Null<typename hb_remove_const (typename hb_remove_reference (Type))> ()
+template <typename QType>
+struct NullHelper
+{
+ typedef typename hb_remove_const (typename hb_remove_reference (QType)) Type;
+ static const Type & get_null () { return Null<Type> (); }
+};
+#define Null(Type) NullHelper<Type>::get_null ()
/* Specializations for arbitrary-content Null objects expressed in bytes. */
#define DECLARE_NULL_NAMESPACE_BYTES(Namespace, Type) \
} /* Close namespace. */ \
extern HB_INTERNAL const unsigned char _hb_Null_##Namespace##_##Type[Namespace::Type::null_size]; \
template <> \
- /*static*/ inline const Namespace::Type& Null<Namespace::Type> (void) { \
+ /*static*/ inline const Namespace::Type& Null<Namespace::Type> () { \
return *reinterpret_cast<const Namespace::Type *> (_hb_Null_##Namespace##_##Type); \
} \
namespace Namespace { \
@@ -105,7 +134,7 @@ static inline Type const & Null (void) {
#define DECLARE_NULL_INSTANCE(Type) \
extern HB_INTERNAL const Type _hb_Null_##Type; \
template <> \
- /*static*/ inline const Type& Null<Type> (void) { \
+ /*static*/ inline const Type& Null<Type> () { \
return _hb_Null_##Type; \
} \
static_assert (true, "Just so we take semicolon after.")
@@ -123,23 +152,29 @@ extern HB_INTERNAL
/* CRAP pool: Common Region for Access Protection. */
template <typename Type>
-static inline Type& Crap (void) {
+static inline Type& Crap () {
static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
memcpy (obj, &Null(Type), sizeof (*obj));
return *obj;
}
-#define Crap(Type) Crap<typename hb_remove_const (typename hb_remove_reference (Type))> ()
+template <typename QType>
+struct CrapHelper
+{
+ typedef typename hb_remove_const (typename hb_remove_reference (QType)) Type;
+ static Type & get_crap () { return Crap<Type> (); }
+};
+#define Crap(Type) CrapHelper<Type>::get_crap ()
template <typename Type>
-struct CrapOrNull {
- static inline Type & get (void) { return Crap(Type); }
+struct CrapOrNullHelper {
+ static Type & get () { return Crap(Type); }
};
template <typename Type>
-struct CrapOrNull<const Type> {
- static inline Type const & get (void) { return Null(Type); }
+struct CrapOrNullHelper<const Type> {
+ static const Type & get () { return Null(Type); }
};
-#define CrapOrNull(Type) CrapOrNull<Type>::get ()
+#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
/*
@@ -151,16 +186,16 @@ struct hb_nonnull_ptr_t
{
typedef typename hb_remove_pointer (P) T;
- inline hb_nonnull_ptr_t (T *v_ = nullptr) : v (v_) {}
- inline T * operator = (T *v_) { return v = v_; }
- inline T * operator -> (void) const { return get (); }
- inline T & operator * (void) const { return *get (); }
- inline T ** operator & (void) const { return &v; }
+ hb_nonnull_ptr_t (T *v_ = nullptr) : v (v_) {}
+ T * operator = (T *v_) { return v = v_; }
+ T * operator -> () const { return get (); }
+ T & operator * () const { return *get (); }
+ T ** operator & () const { return &v; }
/* Only auto-cast to const types. */
- template <typename C> inline operator const C * (void) const { return get (); }
- inline operator const char * (void) const { return (const char *) get (); }
- inline T * get (void) const { return v ? v : const_cast<T *> (&Null(T)); }
- inline T * get_raw (void) const { return v; }
+ template <typename C> operator const C * () const { return get (); }
+ operator const char * () const { return (const char *) get (); }
+ T * get () const { return v ? v : const_cast<T *> (&Null(T)); }
+ T * get_raw () const { return v; }
T *v;
};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-object.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-object.hh
index cdacf49f4c1..6eb1173d82f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-object.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-object.hh
@@ -47,10 +47,10 @@ struct hb_lockable_set_t
{
hb_vector_t <item_t, 1> items;
- inline void init (void) { items.init (); }
+ void init () { items.init (); }
template <typename T>
- inline item_t *replace_or_insert (T v, lock_t &l, bool replace)
+ item_t *replace_or_insert (T v, lock_t &l, bool replace)
{
l.lock ();
item_t *item = items.find (v);
@@ -73,7 +73,7 @@ struct hb_lockable_set_t
}
template <typename T>
- inline void remove (T v, lock_t &l)
+ void remove (T v, lock_t &l)
{
l.lock ();
item_t *item = items.find (v);
@@ -89,7 +89,7 @@ struct hb_lockable_set_t
}
template <typename T>
- inline bool find (T v, item_t *i, lock_t &l)
+ bool find (T v, item_t *i, lock_t &l)
{
l.lock ();
item_t *item = items.find (v);
@@ -100,7 +100,7 @@ struct hb_lockable_set_t
}
template <typename T>
- inline item_t *find_or_insert (T v, lock_t &l)
+ item_t *find_or_insert (T v, lock_t &l)
{
l.lock ();
item_t *item = items.find (v);
@@ -111,7 +111,7 @@ struct hb_lockable_set_t
return item;
}
- inline void fini (lock_t &l)
+ void fini (lock_t &l)
{
if (!items.len) {
/* No need for locking. */
@@ -145,14 +145,14 @@ struct hb_reference_count_t
{
mutable hb_atomic_int_t ref_count;
- inline void init (int v = 1) { ref_count.set_relaxed (v); }
- inline int get_relaxed (void) const { return ref_count.get_relaxed (); }
- inline int inc (void) const { return ref_count.inc (); }
- inline int dec (void) const { return ref_count.dec (); }
- inline void fini (void) { ref_count.set_relaxed (HB_REFERENCE_COUNT_POISON_VALUE); }
+ void init (int v = 1) { ref_count.set_relaxed (v); }
+ int get_relaxed () const { return ref_count.get_relaxed (); }
+ int inc () const { return ref_count.inc (); }
+ int dec () const { return ref_count.dec (); }
+ void fini () { ref_count.set_relaxed (HB_REFERENCE_COUNT_POISON_VALUE); }
- inline bool is_inert (void) const { return ref_count.get_relaxed () == HB_REFERENCE_COUNT_INERT_VALUE; }
- inline bool is_valid (void) const { return ref_count.get_relaxed () > 0; }
+ bool is_inert () const { return ref_count.get_relaxed () == HB_REFERENCE_COUNT_INERT_VALUE; }
+ bool is_valid () const { return ref_count.get_relaxed () > 0; }
};
@@ -165,16 +165,16 @@ struct hb_user_data_array_t
void *data;
hb_destroy_func_t destroy;
- inline bool operator == (hb_user_data_key_t *other_key) const { return key == other_key; }
- inline bool operator == (hb_user_data_item_t &other) const { return key == other.key; }
+ bool operator == (hb_user_data_key_t *other_key) const { return key == other_key; }
+ bool operator == (hb_user_data_item_t &other) const { return key == other.key; }
- void fini (void) { if (destroy) destroy (data); }
+ void fini () { if (destroy) destroy (data); }
};
hb_mutex_t lock;
hb_lockable_set_t<hb_user_data_item_t, hb_mutex_t> items;
- inline void init (void) { lock.init (); items.init (); }
+ void init () { lock.init (); items.init (); }
HB_INTERNAL bool set (hb_user_data_key_t *key,
void * data,
@@ -183,7 +183,7 @@ struct hb_user_data_array_t
HB_INTERNAL void *get (hb_user_data_key_t *key);
- inline void fini (void) { items.fini (lock); lock.fini (); }
+ void fini () { items.fini (lock); lock.fini (); }
};
@@ -219,7 +219,7 @@ static inline void hb_object_trace (const Type *obj, const char *function)
}
template <typename Type>
-static inline Type *hb_object_create (void)
+static inline Type *hb_object_create ()
{
Type *obj = (Type *) calloc (1, sizeof (Type));
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file.hh
index af68892ab11..822a92d3946 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file.hh
@@ -54,8 +54,7 @@ struct TTCHeader;
typedef struct TableRecord
{
- int cmp (Tag t) const
- { return -t.cmp (tag); }
+ int cmp (Tag t) const { return -t.cmp (tag); }
static int cmp (const void *pa, const void *pb)
{
@@ -64,7 +63,7 @@ typedef struct TableRecord
return b->cmp (a->tag);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -83,13 +82,10 @@ typedef struct OffsetTable
{
friend struct OpenTypeFontFile;
- inline unsigned int get_table_count (void) const
- { return tables.len; }
- inline const TableRecord& get_table (unsigned int i) const
- {
- return tables[i];
- }
- inline unsigned int get_table_tags (unsigned int start_offset,
+ unsigned int get_table_count () const { return tables.len; }
+ const TableRecord& get_table (unsigned int i) const
+ { return tables[i]; }
+ unsigned int get_table_tags (unsigned int start_offset,
unsigned int *table_count, /* IN/OUT */
hb_tag_t *table_tags /* OUT */) const
{
@@ -107,13 +103,13 @@ typedef struct OffsetTable
}
return tables.len;
}
- inline bool find_table_index (hb_tag_t tag, unsigned int *table_index) const
+ bool find_table_index (hb_tag_t tag, unsigned int *table_index) const
{
Tag t;
t.set (tag);
return tables.bfind (t, table_index, HB_BFIND_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX);
}
- inline const TableRecord& get_table_by_tag (hb_tag_t tag) const
+ const TableRecord& get_table_by_tag (hb_tag_t tag) const
{
unsigned int table_index;
find_table_index (tag, &table_index);
@@ -122,11 +118,10 @@ 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)
+ template <typename item_t>
+ bool serialize (hb_serialize_context_t *c,
+ hb_tag_t sfnt_tag,
+ hb_array_t<item_t> items)
{
TRACE_SERIALIZE (this);
/* Alloc 12 for the OTHeader. */
@@ -135,17 +130,17 @@ typedef struct OffsetTable
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);
+ if (unlikely (!tables.serialize (c, items.len))) 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++)
+ for (unsigned int i = 0; i < tables.len; i++)
{
TableRecord &rec = tables.arrayZ[i];
- hb_blob_t *blob = blobs[i];
- rec.tag.set (tags[i]);
+ hb_blob_t *blob = items[i].blob;
+ rec.tag.set (items[i].tag);
rec.length.set (hb_blob_get_length (blob));
rec.offset.serialize (c, this);
@@ -159,7 +154,7 @@ typedef struct OffsetTable
c->align (4);
const char *end = (const char *) c->head;
- if (tags[i] == HB_OT_TAG_head && end - start >= head::static_size)
+ if (items[i].tag == HB_OT_TAG_head && end - start >= head::static_size)
{
head *h = (head *) start;
checksum_adjustment = &h->checkSumAdjustment;
@@ -168,8 +163,6 @@ typedef struct OffsetTable
rec.checkSum.set_for_data (start, end - start);
}
- tags += table_count;
- blobs += table_count;
tables.qsort ();
@@ -180,7 +173,7 @@ typedef struct OffsetTable
/* 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++)
+ for (unsigned int i = 0; i < items.len; i++)
{
TableRecord &rec = tables.arrayZ[i];
checksum.set (checksum + rec.checkSum);
@@ -192,7 +185,7 @@ typedef struct OffsetTable
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && tables.sanitize (c));
@@ -215,10 +208,10 @@ struct TTCHeaderVersion1
{
friend struct TTCHeader;
- inline unsigned int get_face_count (void) const { return table.len; }
- inline const OpenTypeFontFace& get_face (unsigned int i) const { return this+table[i]; }
+ unsigned int get_face_count () const { return table.len; }
+ const OpenTypeFontFace& get_face (unsigned int i) const { return this+table[i]; }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (table.sanitize (c, this));
@@ -241,7 +234,7 @@ struct TTCHeader
private:
- inline unsigned int get_face_count (void) const
+ unsigned int get_face_count () const
{
switch (u.header.version.major) {
case 2: /* version 2 is compatible with version 1 */
@@ -249,7 +242,7 @@ struct TTCHeader
default:return 0;
}
}
- inline const OpenTypeFontFace& get_face (unsigned int i) const
+ const OpenTypeFontFace& get_face (unsigned int i) const
{
switch (u.header.version.major) {
case 2: /* version 2 is compatible with version 1 */
@@ -258,7 +251,7 @@ struct TTCHeader
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!u.header.version.sanitize (c))) return_trace (false);
@@ -288,10 +281,10 @@ struct TTCHeader
struct ResourceRecord
{
- inline const OpenTypeFontFace & get_face (const void *data_base) const
+ const OpenTypeFontFace & get_face (const void *data_base) const
{ return CastR<OpenTypeFontFace> ((data_base+offset).arrayZ); }
- inline bool sanitize (hb_sanitize_context_t *c,
+ bool sanitize (hb_sanitize_context_t *c,
const void *data_base) const
{
TRACE_SANITIZE (this);
@@ -317,20 +310,18 @@ struct ResourceRecord
struct ResourceTypeRecord
{
- inline unsigned int get_resource_count (void) const
+ unsigned int get_resource_count () const
{ return tag == HB_TAG_sfnt ? resCountM1 + 1 : 0; }
- inline bool is_sfnt (void) const { return tag == HB_TAG_sfnt; }
+ bool is_sfnt () const { return tag == HB_TAG_sfnt; }
- inline const ResourceRecord& get_resource_record (unsigned int i,
- const void *type_base) const
- {
- return (type_base+resourcesZ).as_array (get_resource_count ())[i];
- }
+ const ResourceRecord& get_resource_record (unsigned int i,
+ const void *type_base) const
+ { return (type_base+resourcesZ).as_array (get_resource_count ())[i]; }
- inline bool sanitize (hb_sanitize_context_t *c,
- const void *type_base,
- const void *data_base) const
+ bool sanitize (hb_sanitize_context_t *c,
+ const void *type_base,
+ const void *data_base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -351,7 +342,7 @@ struct ResourceTypeRecord
struct ResourceMap
{
- inline unsigned int get_face_count (void) const
+ unsigned int get_face_count () const
{
unsigned int count = get_type_count ();
for (unsigned int i = 0; i < count; i++)
@@ -363,8 +354,8 @@ struct ResourceMap
return 0;
}
- inline const OpenTypeFontFace& get_face (unsigned int idx,
- const void *data_base) const
+ const OpenTypeFontFace& get_face (unsigned int idx,
+ const void *data_base) const
{
unsigned int count = get_type_count ();
for (unsigned int i = 0; i < count; i++)
@@ -378,7 +369,7 @@ struct ResourceMap
return Null (OpenTypeFontFace);
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *data_base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *data_base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -388,9 +379,9 @@ struct ResourceMap
}
private:
- inline unsigned int get_type_count (void) const { return (this+typeList).lenM1 + 1; }
+ unsigned int get_type_count () const { return (this+typeList).lenM1 + 1; }
- inline const ResourceTypeRecord& get_type_record (unsigned int i) const
+ const ResourceTypeRecord& get_type_record (unsigned int i) const
{ return (this+typeList)[i]; }
protected:
@@ -409,11 +400,11 @@ struct ResourceMap
struct ResourceForkHeader
{
- inline unsigned int get_face_count (void) const
+ unsigned int get_face_count () const
{ return (this+map).get_face_count (); }
- inline const OpenTypeFontFace& get_face (unsigned int idx,
- unsigned int *base_offset = nullptr) const
+ const OpenTypeFontFace& get_face (unsigned int idx,
+ unsigned int *base_offset = nullptr) const
{
const OpenTypeFontFace &face = (this+map).get_face (idx, &(this+data));
if (base_offset)
@@ -421,7 +412,7 @@ struct ResourceForkHeader
return face;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -457,9 +448,9 @@ struct OpenTypeFontFile
Typ1Tag = HB_TAG ('t','y','p','1') /* Obsolete Apple Type1 font in SFNT container */
};
- inline hb_tag_t get_tag (void) const { return u.tag; }
+ hb_tag_t get_tag () const { return u.tag; }
- inline unsigned int get_face_count (void) const
+ unsigned int get_face_count () const
{
switch (u.tag) {
case CFFTag: /* All the non-collection tags */
@@ -471,7 +462,7 @@ struct OpenTypeFontFile
default: return 0;
}
}
- inline const OpenTypeFontFace& get_face (unsigned int i, unsigned int *base_offset = nullptr) const
+ const OpenTypeFontFace& get_face (unsigned int i, unsigned int *base_offset = nullptr) const
{
if (base_offset)
*base_offset = 0;
@@ -489,19 +480,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)
+ template <typename item_t>
+ bool serialize_single (hb_serialize_context_t *c,
+ hb_tag_t sfnt_tag,
+ hb_array_t<item_t> items)
{
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));
+ return_trace (u.fontFace.serialize (c, sfnt_tag, items));
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!u.tag.sanitize (c))) return_trace (false);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type.hh
index f4d0238ea07..7f88279a792 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type.hh
@@ -52,18 +52,24 @@ namespace OT {
* Int types
*/
+template <bool is_signed> struct hb_signedness_int;
+template <> struct hb_signedness_int<false> { typedef unsigned int value; };
+template <> struct hb_signedness_int<true> { typedef signed int value; };
+
/* Integer types in big-endian order and no alignment requirement */
template <typename Type, unsigned int Size>
struct IntType
{
typedef Type type;
- inline void set (Type i) { v.set (i); }
- inline operator Type (void) const { return v; }
- inline bool operator == (const IntType<Type,Size> &o) const { return (Type) v == (Type) o.v; }
- inline bool operator != (const IntType<Type,Size> &o) const { return !(*this == o); }
- static inline int cmp (const IntType<Type,Size> *a, const IntType<Type,Size> *b) { return b->cmp (*a); }
+ typedef typename hb_signedness_int<hb_is_signed<Type>::value>::value wide_type;
+
+ void set (wide_type i) { v.set (i); }
+ operator wide_type () const { return v; }
+ bool operator == (const IntType<Type,Size> &o) const { return (Type) v == (Type) o.v; }
+ bool operator != (const IntType<Type,Size> &o) const { return !(*this == o); }
+ static int cmp (const IntType<Type,Size> *a, const IntType<Type,Size> *b) { return b->cmp (*a); }
template <typename Type2>
- inline int cmp (Type2 a) const
+ int cmp (Type2 a) const
{
Type b = v;
if (sizeof (Type) < sizeof (int) && sizeof (Type2) < sizeof (int))
@@ -71,7 +77,7 @@ struct IntType
else
return a < b ? -1 : a == b ? 0 : +1;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -88,6 +94,8 @@ typedef IntType<uint16_t, 2> HBUINT16; /* 16-bit unsigned integer. */
typedef IntType<int16_t, 2> HBINT16; /* 16-bit signed integer. */
typedef IntType<uint32_t, 4> HBUINT32; /* 32-bit unsigned integer. */
typedef IntType<int32_t, 4> HBINT32; /* 32-bit signed integer. */
+/* Note: we cannot defined a signed HBINT24 because there's no corresponding C type.
+ * Works for unsigned, but not signed, since we rely on compiler for sign-extension. */
typedef IntType<uint32_t, 3> HBUINT24; /* 24-bit unsigned integer. */
/* 16-bit signed integer (HBINT16) that describes a quantity in FUnits. */
@@ -103,8 +111,8 @@ typedef HBUINT16 UFWORD;
struct F2DOT14 : HBINT16
{
// 16384 means 1<<14
- inline float to_float (void) const { return ((int32_t) v) / 16384.f; }
- inline void set_float (float f) { v.set (round (f * 16384.f)); }
+ float to_float () const { return ((int32_t) v) / 16384.f; }
+ void set_float (float f) { v.set (round (f * 16384.f)); }
public:
DEFINE_SIZE_STATIC (2);
};
@@ -113,8 +121,8 @@ struct F2DOT14 : HBINT16
struct Fixed : HBINT32
{
// 65536 means 1<<16
- inline float to_float (void) const { return ((int32_t) v) / 65536.f; }
- inline void set_float (float f) { v.set (round (f * 65536.f)); }
+ float to_float () const { return ((int32_t) v) / 65536.f; }
+ void set_float (float f) { v.set (round (f * 65536.f)); }
public:
DEFINE_SIZE_STATIC (4);
};
@@ -123,7 +131,7 @@ struct Fixed : HBINT32
* 1904. The value is represented as a signed 64-bit integer. */
struct LONGDATETIME
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -140,8 +148,8 @@ struct LONGDATETIME
struct Tag : HBUINT32
{
/* What the char* converters return is NOT nul-terminated. Print using "%.4s" */
- inline operator const char* (void) const { return reinterpret_cast<const char *> (&this->v); }
- inline operator char* (void) { return reinterpret_cast<char *> (&this->v); }
+ operator const char* () const { return reinterpret_cast<const char *> (&this->v); }
+ operator char* () { return reinterpret_cast<char *> (&this->v); }
public:
DEFINE_SIZE_STATIC (4);
};
@@ -163,9 +171,9 @@ struct Offset : Type
{
typedef Type type;
- inline bool is_null (void) const { return has_null && 0 == *this; }
+ bool is_null () const { return has_null && 0 == *this; }
- inline void *serialize (hb_serialize_context_t *c, const void *base)
+ 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? */
@@ -184,7 +192,7 @@ typedef Offset<HBUINT32> Offset32;
struct CheckSum : HBUINT32
{
/* This is reference implementation from the spec. */
- static inline uint32_t CalcTableChecksum (const HBUINT32 *Table, uint32_t Length)
+ static uint32_t CalcTableChecksum (const HBUINT32 *Table, uint32_t Length)
{
uint32_t Sum = 0L;
assert (0 == (Length & 3));
@@ -196,7 +204,7 @@ struct CheckSum : HBUINT32
}
/* Note: data should be 4byte aligned and have 4byte padding at the end. */
- inline void set_for_data (const void *data, unsigned int length)
+ void set_for_data (const void *data, unsigned int length)
{ set (CalcTableChecksum ((const HBUINT32 *) data, length)); }
public:
@@ -211,9 +219,9 @@ struct CheckSum : HBUINT32
template <typename FixedType=HBUINT16>
struct FixedVersion
{
- inline uint32_t to_int (void) const { return (major << (sizeof (FixedType) * 8)) + minor; }
+ uint32_t to_int () const { return (major << (sizeof (FixedType) * 8)) + minor; }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -234,38 +242,37 @@ struct FixedVersion
template <typename Type, bool has_null>
struct _hb_has_null
{
- static inline const Type *get_null (void) { return nullptr; }
- static inline Type *get_crap (void) { return nullptr; }
+ static const Type *get_null () { return nullptr; }
+ static Type *get_crap () { return nullptr; }
};
template <typename Type>
struct _hb_has_null<Type, true>
{
- static inline const Type *get_null (void) { return &Null(Type); }
- static inline Type *get_crap (void) { return &Crap(Type); }
+ static const Type *get_null () { return &Null(Type); }
+ static Type *get_crap () { return &Crap(Type); }
};
template <typename Type, typename OffsetType=HBUINT16, bool has_null=true>
struct OffsetTo : Offset<OffsetType, has_null>
{
- inline const Type& operator () (const void *base) const
+ const Type& operator () (const void *base) const
{
if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
return StructAtOffset<const Type> (base, *this);
}
- inline Type& operator () (void *base) const
+ Type& operator () (void *base) const
{
- if (unlikely (this->is_null ())) return Crap (Type);
if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_crap ();
return StructAtOffset<Type> (base, *this);
}
- inline Type& serialize (hb_serialize_context_t *c, const void *base)
+ Type& serialize (hb_serialize_context_t *c, const void *base)
{
return * (Type *) Offset<OffsetType>::serialize (c, base);
}
template <typename T>
- inline void serialize_subset (hb_subset_context_t *c, const T &src, const void *base)
+ void serialize_subset (hb_subset_context_t *c, const T &src, const void *base)
{
if (&src == &Null (T))
{
@@ -277,7 +284,7 @@ struct OffsetTo : Offset<OffsetType, has_null>
this->set (0);
}
- inline bool sanitize_shallow (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize_shallow (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
if (unlikely (!c->check_struct (this))) return_trace (false);
@@ -286,7 +293,7 @@ struct OffsetTo : Offset<OffsetType, has_null>
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (sanitize_shallow (c, base) &&
@@ -295,7 +302,7 @@ struct OffsetTo : Offset<OffsetType, has_null>
neuter (c)));
}
template <typename T1>
- inline bool sanitize (hb_sanitize_context_t *c, const void *base, T1 d1) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base, T1 d1) const
{
TRACE_SANITIZE (this);
return_trace (sanitize_shallow (c, base) &&
@@ -304,7 +311,7 @@ struct OffsetTo : Offset<OffsetType, has_null>
neuter (c)));
}
template <typename T1, typename T2>
- inline bool sanitize (hb_sanitize_context_t *c, const void *base, T1 d1, T2 d2) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base, T1 d1, T2 d2) const
{
TRACE_SANITIZE (this);
return_trace (sanitize_shallow (c, base) &&
@@ -313,7 +320,7 @@ struct OffsetTo : Offset<OffsetType, has_null>
neuter (c)));
}
template <typename T1, typename T2, typename T3>
- inline bool sanitize (hb_sanitize_context_t *c, const void *base, T1 d1, T2 d2, T3 d3) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base, T1 d1, T2 d2, T3 d3) const
{
TRACE_SANITIZE (this);
return_trace (sanitize_shallow (c, base) &&
@@ -323,7 +330,7 @@ struct OffsetTo : Offset<OffsetType, has_null>
}
/* Set the offset to Null */
- inline bool neuter (hb_sanitize_context_t *c) const
+ bool neuter (hb_sanitize_context_t *c) const
{
if (!has_null) return false;
return c->try_set (this, 0);
@@ -345,47 +352,49 @@ static inline Type& operator + (Base &base, OffsetTo<Type, OffsetType, has_null>
template <typename Type>
struct UnsizedArrayOf
{
- static_assert ((bool) (unsigned) hb_static_size (Type), "");
-
- enum { item_size = Type::static_size };
+ typedef Type ItemType;
+ enum { item_size = hb_static_size (Type) };
HB_NO_CREATE_COPY_ASSIGN_TEMPLATE (UnsizedArrayOf, Type);
- inline const Type& operator [] (unsigned int i) const
+ const Type& operator [] (int i_) const
{
+ unsigned int i = (unsigned int) i_;
const Type *p = &arrayZ[i];
if (unlikely (p < arrayZ)) return Null (Type); /* Overflowed. */
return *p;
}
- inline Type& operator [] (unsigned int i)
+ Type& operator [] (int i_)
{
+ unsigned int i = (unsigned int) i_;
Type *p = &arrayZ[i];
if (unlikely (p < arrayZ)) return Crap (Type); /* Overflowed. */
return *p;
}
- template <typename T> inline operator T * (void) { return arrayZ; }
- template <typename T> inline operator const T * (void) const { return arrayZ; }
-
- inline unsigned int get_size (unsigned int len) const
+ unsigned int get_size (unsigned int len) const
{ return len * Type::static_size; }
- inline hb_array_t<Type> as_array (unsigned int len)
+ template <typename T> operator T * () { return arrayZ; }
+ template <typename T> operator const T * () const { return arrayZ; }
+ hb_array_t<Type> as_array (unsigned int len)
{ return hb_array (arrayZ, len); }
- inline hb_array_t<const Type> as_array (unsigned int len) const
+ hb_array_t<const Type> as_array (unsigned int len) const
{ return hb_array (arrayZ, len); }
+ operator hb_array_t<Type> () { return as_array (); }
+ operator hb_array_t<const Type> () const { return as_array (); }
template <typename T>
- inline Type &lsearch (unsigned int len, const T &x, Type &not_found = Crap (Type))
+ Type &lsearch (unsigned int len, const T &x, Type &not_found = Crap (Type))
{ return *as_array (len).lsearch (x, &not_found); }
template <typename T>
- inline const Type &lsearch (unsigned int len, const T &x, const Type &not_found = Null (Type)) const
+ const Type &lsearch (unsigned int len, const T &x, const Type &not_found = Null (Type)) const
{ return *as_array (len).lsearch (x, &not_found); }
- inline void qsort (unsigned int len, unsigned int start = 0, unsigned int end = (unsigned int) -1)
+ void qsort (unsigned int len, unsigned int start = 0, unsigned int end = (unsigned int) -1)
{ as_array (len).qsort (start, end); }
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int count) const
+ bool sanitize (hb_sanitize_context_t *c, unsigned int count) const
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
@@ -401,7 +410,7 @@ struct UnsizedArrayOf
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int count, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, unsigned int count, const void *base) const
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
@@ -411,7 +420,7 @@ struct UnsizedArrayOf
return_trace (true);
}
template <typename T>
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int count, const void *base, T user_data) const
+ bool sanitize (hb_sanitize_context_t *c, unsigned int count, const void *base, T user_data) const
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
@@ -421,7 +430,7 @@ struct UnsizedArrayOf
return_trace (true);
}
- inline bool sanitize_shallow (hb_sanitize_context_t *c, unsigned int count) const
+ bool sanitize_shallow (hb_sanitize_context_t *c, unsigned int count) const
{
TRACE_SANITIZE (this);
return_trace (c->check_array (arrayZ, count));
@@ -441,27 +450,29 @@ struct UnsizedOffsetArrayOf : UnsizedArrayOf<OffsetTo<Type, OffsetType, has_null
template <typename Type, typename OffsetType, bool has_null=true>
struct UnsizedOffsetListOf : UnsizedOffsetArrayOf<Type, OffsetType, has_null>
{
- inline const Type& operator [] (unsigned int i) const
+ const Type& operator [] (int i_) const
{
+ unsigned int i = (unsigned int) i_;
const OffsetTo<Type, OffsetType, has_null> *p = &this->arrayZ[i];
if (unlikely (p < this->arrayZ)) return Null (Type); /* Overflowed. */
return this+*p;
}
- inline Type& operator [] (unsigned int i)
+ Type& operator [] (int i_)
{
+ unsigned int i = (unsigned int) i_;
const OffsetTo<Type, OffsetType, has_null> *p = &this->arrayZ[i];
if (unlikely (p < this->arrayZ)) return Crap (Type); /* Overflowed. */
return this+*p;
}
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int count) const
+ bool sanitize (hb_sanitize_context_t *c, unsigned int count) const
{
TRACE_SANITIZE (this);
return_trace ((UnsizedOffsetArrayOf<Type, OffsetType, has_null>::sanitize (c, count, this)));
}
template <typename T>
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int count, T user_data) const
+ bool sanitize (hb_sanitize_context_t *c, unsigned int count, T user_data) const
{
TRACE_SANITIZE (this);
return_trace ((UnsizedOffsetArrayOf<Type, OffsetType, has_null>::sanitize (c, count, this, user_data)));
@@ -472,19 +483,21 @@ struct UnsizedOffsetListOf : UnsizedOffsetArrayOf<Type, OffsetType, has_null>
template <typename Type>
struct SortedUnsizedArrayOf : UnsizedArrayOf<Type>
{
- inline hb_sorted_array_t<Type> as_array (unsigned int len)
+ hb_sorted_array_t<Type> as_array (unsigned int len)
{ return hb_sorted_array (this->arrayZ, len); }
- inline hb_sorted_array_t<const Type> as_array (unsigned int len) const
+ hb_sorted_array_t<const Type> as_array (unsigned int len) const
{ return hb_sorted_array (this->arrayZ, len); }
+ operator hb_sorted_array_t<Type> () { return as_array (); }
+ operator hb_sorted_array_t<const Type> () const { return as_array (); }
template <typename T>
- inline Type &bsearch (unsigned int len, const T &x, Type &not_found = Crap (Type))
+ Type &bsearch (unsigned int len, const T &x, Type &not_found = Crap (Type))
{ return *as_array (len).bsearch (x, &not_found); }
template <typename T>
- inline const Type &bsearch (unsigned int len, const T &x, const Type &not_found = Null (Type)) const
+ const Type &bsearch (unsigned int len, const T &x, const Type &not_found = Null (Type)) const
{ return *as_array (len).bsearch (x, &not_found); }
template <typename T>
- inline bool bfind (unsigned int len, const T &x, unsigned int *i = nullptr,
+ bool bfind (unsigned int len, const T &x, unsigned int *i = nullptr,
hb_bfind_not_found_t not_found = HB_BFIND_NOT_FOUND_DONT_STORE,
unsigned int to_store = (unsigned int) -1) const
{ return as_array (len).bfind (x, i, not_found, to_store); }
@@ -495,42 +508,44 @@ struct SortedUnsizedArrayOf : UnsizedArrayOf<Type>
template <typename Type, typename LenType=HBUINT16>
struct ArrayOf
{
- static_assert ((bool) (unsigned) hb_static_size (Type), "");
-
- enum { item_size = Type::static_size };
+ typedef Type ItemType;
+ enum { item_size = hb_static_size (Type) };
HB_NO_CREATE_COPY_ASSIGN_TEMPLATE2 (ArrayOf, Type, LenType);
- inline const Type& operator [] (unsigned int i) const
+ const Type& operator [] (int i_) const
{
+ unsigned int i = (unsigned int) i_;
if (unlikely (i >= len)) return Null (Type);
return arrayZ[i];
}
- inline Type& operator [] (unsigned int i)
+ Type& operator [] (int i_)
{
+ unsigned int i = (unsigned int) i_;
if (unlikely (i >= len)) return Crap (Type);
return arrayZ[i];
}
- inline unsigned int get_size (void) const
+ unsigned int get_size () const
{ return len.static_size + len * Type::static_size; }
- inline hb_array_t<Type> as_array (void)
+ hb_array_t<Type> as_array ()
{ return hb_array (arrayZ, len); }
- inline hb_array_t<const Type> as_array (void) const
+ hb_array_t<const Type> as_array () const
{ return hb_array (arrayZ, len); }
+ operator hb_array_t<Type> (void) { return as_array (); }
+ operator hb_array_t<const Type> (void) const { return as_array (); }
- inline hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int count) const
+ hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int count) const
{ return as_array ().sub_array (start_offset, count);}
- inline hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int *count /* IN/OUT */) const
+ hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */) const
{ return as_array ().sub_array (start_offset, count);}
- inline hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int count)
+ hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int count)
{ return as_array ().sub_array (start_offset, count);}
- inline hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int *count /* IN/OUT */)
+ hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */)
{ return as_array ().sub_array (start_offset, count);}
- inline bool serialize (hb_serialize_context_t *c,
- unsigned int items_len)
+ bool serialize (hb_serialize_context_t *c, unsigned int items_len)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (*this))) return_trace (false);
@@ -538,19 +553,17 @@ struct ArrayOf
if (unlikely (!c->extend (*this))) return_trace (false);
return_trace (true);
}
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<Type> &items,
- unsigned int items_len)
+ template <typename T>
+ bool serialize (hb_serialize_context_t *c, hb_array_t<const T> items)
{
TRACE_SERIALIZE (this);
- if (unlikely (!serialize (c, items_len))) return_trace (false);
- for (unsigned int i = 0; i < items_len; i++)
- arrayZ[i] = items[i];
- items += items_len;
+ if (unlikely (!serialize (c, items.len))) return_trace (false);
+ for (unsigned int i = 0; i < items.len; i++)
+ hb_assign (arrayZ[i], items[i]);
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return_trace (false);
@@ -566,7 +579,7 @@ struct ArrayOf
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return_trace (false);
@@ -577,7 +590,7 @@ struct ArrayOf
return_trace (true);
}
template <typename T>
- inline bool sanitize (hb_sanitize_context_t *c, const void *base, T user_data) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base, T user_data) const
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return_trace (false);
@@ -589,16 +602,16 @@ struct ArrayOf
}
template <typename T>
- inline Type &lsearch (const T &x, Type &not_found = Crap (Type))
+ Type &lsearch (const T &x, Type &not_found = Crap (Type))
{ return *as_array ().lsearch (x, &not_found); }
template <typename T>
- inline const Type &lsearch (const T &x, const Type &not_found = Null (Type)) const
+ const Type &lsearch (const T &x, const Type &not_found = Null (Type)) const
{ return *as_array ().lsearch (x, &not_found); }
- inline void qsort (unsigned int start = 0, unsigned int end = (unsigned int) -1)
+ void qsort (unsigned int start = 0, unsigned int end = (unsigned int) -1)
{ as_array ().qsort (start, end); }
- inline bool sanitize_shallow (hb_sanitize_context_t *c) const
+ bool sanitize_shallow (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
@@ -625,18 +638,20 @@ struct LOffsetLArrayOf : ArrayOf<OffsetTo<Type, HBUINT32>, HBUINT32> {};
template <typename Type>
struct OffsetListOf : OffsetArrayOf<Type>
{
- inline const Type& operator [] (unsigned int i) const
+ const Type& operator [] (int i_) const
{
+ unsigned int i = (unsigned int) i_;
if (unlikely (i >= this->len)) return Null (Type);
return this+this->arrayZ[i];
}
- inline const Type& operator [] (unsigned int i)
+ const Type& operator [] (int i_)
{
+ unsigned int i = (unsigned int) i_;
if (unlikely (i >= this->len)) return Crap (Type);
return this+this->arrayZ[i];
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
struct OffsetListOf<Type> *out = c->serializer->embed (*this);
@@ -647,13 +662,13 @@ struct OffsetListOf : OffsetArrayOf<Type>
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (OffsetArrayOf<Type>::sanitize (c, this));
}
template <typename T>
- inline bool sanitize (hb_sanitize_context_t *c, T user_data) const
+ bool sanitize (hb_sanitize_context_t *c, T user_data) const
{
TRACE_SANITIZE (this);
return_trace (OffsetArrayOf<Type>::sanitize (c, this, user_data));
@@ -668,35 +683,34 @@ struct HeadlessArrayOf
HB_NO_CREATE_COPY_ASSIGN_TEMPLATE2 (HeadlessArrayOf, Type, LenType);
- inline const Type& operator [] (unsigned int i) const
+ const Type& operator [] (int i_) const
{
+ unsigned int i = (unsigned int) i_;
if (unlikely (i >= lenP1 || !i)) return Null (Type);
return arrayZ[i-1];
}
- inline Type& operator [] (unsigned int i)
+ Type& operator [] (int i_)
{
+ unsigned int i = (unsigned int) i_;
if (unlikely (i >= lenP1 || !i)) return Crap (Type);
return arrayZ[i-1];
}
- inline unsigned int get_size (void) const
+ unsigned int get_size () const
{ return lenP1.static_size + (lenP1 ? lenP1 - 1 : 0) * Type::static_size; }
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<Type> &items,
- unsigned int items_len)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const Type> items)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (*this))) return_trace (false);
- lenP1.set (items_len); /* TODO(serialize) Overflow? */
- if (unlikely (!items_len)) return_trace (true);
+ lenP1.set (items.len + 1); /* TODO(serialize) Overflow? */
if (unlikely (!c->extend (*this))) return_trace (false);
- for (unsigned int i = 0; i < items_len - 1; i++)
+ for (unsigned int i = 0; i < items.len; i++)
arrayZ[i] = items[i];
- items += items_len - 1;
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return_trace (false);
@@ -714,7 +728,7 @@ struct HeadlessArrayOf
}
private:
- inline bool sanitize_shallow (hb_sanitize_context_t *c) const
+ bool sanitize_shallow (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (lenP1.sanitize (c) &&
@@ -734,21 +748,23 @@ struct ArrayOfM1
{
HB_NO_CREATE_COPY_ASSIGN_TEMPLATE2 (ArrayOfM1, Type, LenType);
- inline const Type& operator [] (unsigned int i) const
+ const Type& operator [] (int i_) const
{
+ unsigned int i = (unsigned int) i_;
if (unlikely (i > lenM1)) return Null (Type);
return arrayZ[i];
}
- inline Type& operator [] (unsigned int i)
+ Type& operator [] (int i_)
{
+ unsigned int i = (unsigned int) i_;
if (unlikely (i > lenM1)) return Crap (Type);
return arrayZ[i];
}
- inline unsigned int get_size (void) const
+ unsigned int get_size () const
{ return lenM1.static_size + (lenM1 + 1) * Type::static_size; }
template <typename T>
- inline bool sanitize (hb_sanitize_context_t *c, const void *base, T user_data) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base, T user_data) const
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return_trace (false);
@@ -760,7 +776,7 @@ struct ArrayOfM1
}
private:
- inline bool sanitize_shallow (hb_sanitize_context_t *c) const
+ bool sanitize_shallow (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (lenM1.sanitize (c) &&
@@ -778,28 +794,30 @@ struct ArrayOfM1
template <typename Type, typename LenType=HBUINT16>
struct SortedArrayOf : ArrayOf<Type, LenType>
{
- inline hb_sorted_array_t<Type> as_array (void)
+ hb_sorted_array_t<Type> as_array ()
{ return hb_sorted_array (this->arrayZ, this->len); }
- inline hb_sorted_array_t<const Type> as_array (void) const
+ hb_sorted_array_t<const Type> as_array () const
{ return hb_sorted_array (this->arrayZ, this->len); }
+ operator hb_sorted_array_t<Type> () { return as_array (); }
+ operator hb_sorted_array_t<const Type> () const { return as_array (); }
- inline hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int count) const
+ hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int count) const
{ return as_array ().sub_array (start_offset, count);}
- inline hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int *count /* IN/OUT */) const
+ hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */) const
{ return as_array ().sub_array (start_offset, count);}
- inline hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int count)
+ hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int count)
{ return as_array ().sub_array (start_offset, count);}
- inline hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int *count /* IN/OUT */)
+ hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */)
{ return as_array ().sub_array (start_offset, count);}
template <typename T>
- inline Type &bsearch (const T &x, Type &not_found = Crap (Type))
+ Type &bsearch (const T &x, Type &not_found = Crap (Type))
{ return *as_array ().bsearch (x, &not_found); }
template <typename T>
- inline const Type &bsearch (const T &x, const Type &not_found = Null (Type)) const
+ const Type &bsearch (const T &x, const Type &not_found = Null (Type)) const
{ return *as_array ().bsearch (x, &not_found); }
template <typename T>
- inline bool bfind (const T &x, unsigned int *i = nullptr,
+ bool bfind (const T &x, unsigned int *i = nullptr,
hb_bfind_not_found_t not_found = HB_BFIND_NOT_FOUND_DONT_STORE,
unsigned int to_store = (unsigned int) -1) const
{ return as_array ().bfind (x, i, not_found, to_store); }
@@ -812,15 +830,15 @@ struct SortedArrayOf : ArrayOf<Type, LenType>
template <typename LenType=HBUINT16>
struct BinSearchHeader
{
- inline operator uint32_t (void) const { return len; }
+ operator uint32_t () const { return len; }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
}
- inline void set (unsigned int v)
+ void set (unsigned int v)
{
len.set (v);
assert (len == v);
@@ -848,7 +866,7 @@ struct BinSearchArrayOf : SortedArrayOf<Type, BinSearchHeader<LenType> > {};
struct VarSizedBinSearchHeader
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -874,7 +892,7 @@ struct VarSizedBinSearchArrayOf
HB_NO_CREATE_COPY_ASSIGN_TEMPLATE (VarSizedBinSearchArrayOf, Type);
- inline bool last_is_terminator (void) const
+ bool last_is_terminator () const
{
if (unlikely (!header.nUnits)) return false;
@@ -890,24 +908,24 @@ struct VarSizedBinSearchArrayOf
return true;
}
- inline const Type& operator [] (unsigned int i) const
+ const Type& operator [] (int i_) const
{
+ unsigned int i = (unsigned int) i_;
if (unlikely (i >= get_length ())) return Null (Type);
return StructAtOffset<Type> (&bytesZ, i * header.unitSize);
}
- inline Type& operator [] (unsigned int i)
+ Type& operator [] (int i_)
{
+ unsigned int i = (unsigned int) i_;
if (unlikely (i >= get_length ())) return Crap (Type);
return StructAtOffset<Type> (&bytesZ, i * header.unitSize);
}
- inline unsigned int get_length (void) const
- {
- return header.nUnits - last_is_terminator ();
- }
- inline unsigned int get_size (void) const
+ unsigned int get_length () const
+ { return header.nUnits - last_is_terminator (); }
+ unsigned int get_size () const
{ return header.static_size + header.nUnits * header.unitSize; }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return_trace (false);
@@ -923,7 +941,7 @@ struct VarSizedBinSearchArrayOf
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return_trace (false);
@@ -934,7 +952,7 @@ struct VarSizedBinSearchArrayOf
return_trace (true);
}
template <typename T>
- inline bool sanitize (hb_sanitize_context_t *c, const void *base, T user_data) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base, T user_data) const
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return_trace (false);
@@ -946,7 +964,7 @@ struct VarSizedBinSearchArrayOf
}
template <typename T>
- inline const Type *bsearch (const T &key) const
+ const Type *bsearch (const T &key) const
{
unsigned int size = header.unitSize;
int min = 0, max = (int) get_length () - 1;
@@ -963,7 +981,7 @@ struct VarSizedBinSearchArrayOf
}
private:
- inline bool sanitize_shallow (hb_sanitize_context_t *c) const
+ bool sanitize_shallow (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (header.sanitize (c) &&
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff-common.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff-common.hh
new file mode 100644
index 00000000000..db04b3eb239
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff-common.hh
@@ -0,0 +1,711 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+#ifndef HB_OT_CFF_COMMON_HH
+#define HB_OT_CFF_COMMON_HH
+
+#include "hb-open-type.hh"
+#include "hb-ot-layout-common.hh"
+#include "hb-cff-interp-dict-common.hh"
+#include "hb-subset-plan.hh"
+
+namespace CFF {
+
+using namespace OT;
+
+#define CFF_UNDEF_CODE 0xFFFFFFFF
+
+/* utility macro */
+template<typename Type>
+static inline const Type& StructAtOffsetOrNull(const void *P, unsigned int offset)
+{ return offset? (* reinterpret_cast<const Type*> ((const char *) P + offset)): Null(Type); }
+
+inline unsigned int calcOffSize(unsigned int dataSize)
+{
+ unsigned int size = 1;
+ unsigned int offset = dataSize + 1;
+ while ((offset & ~0xFF) != 0)
+ {
+ size++;
+ offset >>= 8;
+ }
+ /* format does not support size > 4; caller should handle it as an error */
+ return size;
+}
+
+struct code_pair
+{
+ hb_codepoint_t code;
+ hb_codepoint_t glyph;
+};
+
+typedef hb_vector_t<char, 1> StrBuff;
+struct StrBuffArray : hb_vector_t<StrBuff>
+{
+ void fini () { SUPER::fini_deep (); }
+
+ unsigned int total_size () const
+ {
+ unsigned int size = 0;
+ for (unsigned int i = 0; i < len; i++)
+ size += (*this)[i].len;
+ return size;
+ }
+
+ private:
+ typedef hb_vector_t<StrBuff> SUPER;
+};
+
+/* CFF INDEX */
+template <typename COUNT>
+struct CFFIndex
+{
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (likely ((count.sanitize (c) && count == 0) || /* empty INDEX */
+ (c->check_struct (this) && offSize >= 1 && offSize <= 4 &&
+ c->check_array (offsets, offSize, count + 1) &&
+ c->check_array ((const HBUINT8*)data_base (), 1, max_offset () - 1))));
+ }
+
+ static unsigned int calculate_offset_array_size (unsigned int offSize, unsigned int count)
+ { return offSize * (count + 1); }
+
+ unsigned int offset_array_size () const
+ { return calculate_offset_array_size (offSize, count); }
+
+ static unsigned int calculate_serialized_size (unsigned int offSize, unsigned int count, unsigned int dataSize)
+ {
+ if (count == 0)
+ return COUNT::static_size;
+ else
+ return min_size + calculate_offset_array_size (offSize, count) + dataSize;
+ }
+
+ bool serialize (hb_serialize_context_t *c, const CFFIndex &src)
+ {
+ TRACE_SERIALIZE (this);
+ unsigned int size = src.get_size ();
+ CFFIndex *dest = c->allocate_size<CFFIndex> (size);
+ if (unlikely (dest == nullptr)) return_trace (false);
+ memcpy (dest, &src, size);
+ return_trace (true);
+ }
+
+ bool serialize (hb_serialize_context_t *c,
+ unsigned int offSize_,
+ const ByteStrArray &byteArray)
+ {
+ TRACE_SERIALIZE (this);
+ if (byteArray.len == 0)
+ {
+ COUNT *dest = c->allocate_min<COUNT> ();
+ if (unlikely (dest == nullptr)) return_trace (false);
+ dest->set (0);
+ }
+ else
+ {
+ /* serialize CFFIndex header */
+ if (unlikely (!c->extend_min (*this))) return_trace (false);
+ this->count.set (byteArray.len);
+ this->offSize.set (offSize_);
+ if (!unlikely (c->allocate_size<HBUINT8> (offSize_ * (byteArray.len + 1))))
+ return_trace (false);
+
+ /* serialize indices */
+ unsigned int offset = 1;
+ unsigned int i = 0;
+ for (; i < byteArray.len; i++)
+ {
+ set_offset_at (i, offset);
+ offset += byteArray[i].get_size ();
+ }
+ set_offset_at (i, offset);
+
+ /* serialize data */
+ for (unsigned int i = 0; i < byteArray.len; i++)
+ {
+ ByteStr *dest = c->start_embed<ByteStr> ();
+ if (unlikely (dest == nullptr ||
+ !dest->serialize (c, byteArray[i])))
+ return_trace (false);
+ }
+ }
+ return_trace (true);
+ }
+
+ bool serialize (hb_serialize_context_t *c,
+ unsigned int offSize_,
+ const StrBuffArray &buffArray)
+ {
+ ByteStrArray byteArray;
+ byteArray.init ();
+ byteArray.resize (buffArray.len);
+ for (unsigned int i = 0; i < byteArray.len; i++)
+ {
+ byteArray[i] = ByteStr (buffArray[i].arrayZ (), buffArray[i].len);
+ }
+ bool result = this->serialize (c, offSize_, byteArray);
+ byteArray.fini ();
+ return result;
+ }
+
+ void set_offset_at (unsigned int index, unsigned int offset)
+ {
+ HBUINT8 *p = offsets + offSize * index + offSize;
+ unsigned int size = offSize;
+ for (; size; size--)
+ {
+ --p;
+ p->set (offset & 0xFF);
+ offset >>= 8;
+ }
+ }
+
+ unsigned int offset_at (unsigned int index) const
+ {
+ assert (index <= count);
+ const HBUINT8 *p = offsets + offSize * index;
+ unsigned int size = offSize;
+ unsigned int offset = 0;
+ for (; size; size--)
+ offset = (offset << 8) + *p++;
+ return offset;
+ }
+
+ unsigned int length_at (unsigned int index) const
+ {
+ if (likely ((offset_at (index + 1) >= offset_at (index)) &&
+ (offset_at (index + 1) <= offset_at (count))))
+ return offset_at (index + 1) - offset_at (index);
+ else
+ return 0;
+ }
+
+ const char *data_base () const
+ { return (const char *)this + min_size + offset_array_size (); }
+
+ unsigned int data_size () const { return HBINT8::static_size; }
+
+ ByteStr operator [] (unsigned int index) const
+ {
+ if (likely (index < count))
+ return ByteStr (data_base () + offset_at (index) - 1, length_at (index));
+ else
+ return Null(ByteStr);
+ }
+
+ unsigned int get_size () const
+ {
+ if (this != &Null(CFFIndex))
+ {
+ if (count > 0)
+ return min_size + offset_array_size () + (offset_at (count) - 1);
+ else
+ return count.static_size; /* empty CFFIndex contains count only */
+ }
+ else
+ return 0;
+ }
+
+ protected:
+ unsigned int max_offset () const
+ {
+ unsigned int max = 0;
+ for (unsigned int i = 0; i < count + 1u; i++)
+ {
+ unsigned int off = offset_at (i);
+ if (off > max) max = off;
+ }
+ return max;
+ }
+
+ public:
+ COUNT count; /* Number of object data. Note there are (count+1) offsets */
+ HBUINT8 offSize; /* The byte size of each offset in the offsets array. */
+ HBUINT8 offsets[VAR]; /* The array of (count + 1) offsets into objects array (1-base). */
+ /* HBUINT8 data[VAR]; Object data */
+ public:
+ DEFINE_SIZE_ARRAY (COUNT::static_size + HBUINT8::static_size, offsets);
+};
+
+template <typename COUNT, typename TYPE>
+struct CFFIndexOf : CFFIndex<COUNT>
+{
+ const ByteStr operator [] (unsigned int index) const
+ {
+ if (likely (index < CFFIndex<COUNT>::count))
+ return ByteStr (CFFIndex<COUNT>::data_base () + CFFIndex<COUNT>::offset_at (index) - 1, CFFIndex<COUNT>::length_at (index));
+ return Null(ByteStr);
+ }
+
+ template <typename DATA, typename PARAM1, typename PARAM2>
+ bool serialize (hb_serialize_context_t *c,
+ unsigned int offSize_,
+ const DATA *dataArray,
+ unsigned int dataArrayLen,
+ const hb_vector_t<unsigned int> &dataSizeArray,
+ const PARAM1 &param1,
+ const PARAM2 &param2)
+ {
+ TRACE_SERIALIZE (this);
+ /* serialize CFFIndex header */
+ if (unlikely (!c->extend_min (*this))) return_trace (false);
+ this->count.set (dataArrayLen);
+ this->offSize.set (offSize_);
+ if (!unlikely (c->allocate_size<HBUINT8> (offSize_ * (dataArrayLen + 1))))
+ return_trace (false);
+
+ /* serialize indices */
+ unsigned int offset = 1;
+ unsigned int i = 0;
+ for (; i < dataArrayLen; i++)
+ {
+ CFFIndex<COUNT>::set_offset_at (i, offset);
+ offset += dataSizeArray[i];
+ }
+ CFFIndex<COUNT>::set_offset_at (i, offset);
+
+ /* serialize data */
+ for (unsigned int i = 0; i < dataArrayLen; i++)
+ {
+ TYPE *dest = c->start_embed<TYPE> ();
+ if (unlikely (dest == nullptr ||
+ !dest->serialize (c, dataArray[i], param1, param2)))
+ return_trace (false);
+ }
+ return_trace (true);
+ }
+
+ /* in parallel to above */
+ template <typename DATA, typename PARAM>
+ static unsigned int calculate_serialized_size (unsigned int &offSize_ /* OUT */,
+ const DATA *dataArray,
+ unsigned int dataArrayLen,
+ hb_vector_t<unsigned int> &dataSizeArray, /* OUT */
+ const PARAM &param)
+ {
+ /* determine offset size */
+ unsigned int totalDataSize = 0;
+ for (unsigned int i = 0; i < dataArrayLen; i++)
+ {
+ unsigned int dataSize = TYPE::calculate_serialized_size (dataArray[i], param);
+ dataSizeArray[i] = dataSize;
+ totalDataSize += dataSize;
+ }
+ offSize_ = calcOffSize (totalDataSize);
+
+ return CFFIndex<COUNT>::calculate_serialized_size (offSize_, dataArrayLen, totalDataSize);
+ }
+};
+
+/* Top Dict, Font Dict, Private Dict */
+struct Dict : UnsizedByteStr
+{
+ template <typename DICTVAL, typename OP_SERIALIZER, typename PARAM>
+ bool serialize (hb_serialize_context_t *c,
+ const DICTVAL &dictval,
+ OP_SERIALIZER& opszr,
+ PARAM& param)
+ {
+ TRACE_SERIALIZE (this);
+ for (unsigned int i = 0; i < dictval.get_count (); i++)
+ {
+ if (unlikely (!opszr.serialize (c, dictval[i], param)))
+ return_trace (false);
+ }
+ return_trace (true);
+ }
+
+ /* in parallel to above */
+ template <typename DICTVAL, typename OP_SERIALIZER, typename PARAM>
+ static unsigned int calculate_serialized_size (const DICTVAL &dictval,
+ OP_SERIALIZER& opszr,
+ PARAM& param)
+ {
+ unsigned int size = 0;
+ for (unsigned int i = 0; i < dictval.get_count (); i++)
+ size += opszr.calculate_serialized_size (dictval[i], param);
+ return size;
+ }
+
+ template <typename DICTVAL, typename OP_SERIALIZER>
+ static unsigned int calculate_serialized_size (const DICTVAL &dictval,
+ OP_SERIALIZER& opszr)
+ {
+ unsigned int size = 0;
+ for (unsigned int i = 0; i < dictval.get_count (); i++)
+ size += opszr.calculate_serialized_size (dictval[i]);
+ return size;
+ }
+
+ template <typename INTTYPE, int minVal, int maxVal>
+ static bool serialize_int_op (hb_serialize_context_t *c, OpCode op, int value, OpCode intOp)
+ {
+ // XXX: not sure why but LLVM fails to compile the following 'unlikely' macro invocation
+ if (/*unlikely*/ (!serialize_int<INTTYPE, minVal, maxVal> (c, intOp, value)))
+ return false;
+
+ TRACE_SERIALIZE (this);
+ /* serialize the opcode */
+ HBUINT8 *p = c->allocate_size<HBUINT8> (OpCode_Size (op));
+ if (unlikely (p == nullptr)) return_trace (false);
+ if (Is_OpCode_ESC (op))
+ {
+ p->set (OpCode_escape);
+ op = Unmake_OpCode_ESC (op);
+ p++;
+ }
+ p->set (op);
+ return_trace (true);
+ }
+
+ static bool serialize_uint4_op (hb_serialize_context_t *c, OpCode op, int value)
+ { return serialize_int_op<HBUINT32, 0, 0x7FFFFFFF> (c, op, value, OpCode_longintdict); }
+
+ static bool serialize_uint2_op (hb_serialize_context_t *c, OpCode op, int value)
+ { return serialize_int_op<HBUINT16, 0, 0x7FFF> (c, op, value, OpCode_shortint); }
+
+ static bool serialize_offset4_op (hb_serialize_context_t *c, OpCode op, int value)
+ {
+ return serialize_uint4_op (c, op, value);
+ }
+
+ static bool serialize_offset2_op (hb_serialize_context_t *c, OpCode op, int value)
+ {
+ return serialize_uint2_op (c, op, value);
+ }
+};
+
+struct TopDict : Dict {};
+struct FontDict : Dict {};
+struct PrivateDict : Dict {};
+
+struct TableInfo
+{
+ void init () { offSize = offset = size = 0; }
+
+ unsigned int offset;
+ unsigned int size;
+ unsigned int offSize;
+};
+
+/* used to remap font index or SID from fullset to subset.
+ * set to CFF_UNDEF_CODE if excluded from subset */
+struct Remap : hb_vector_t<hb_codepoint_t>
+{
+ void init () { SUPER::init (); }
+
+ void fini () { SUPER::fini (); }
+
+ bool reset (unsigned int size)
+ {
+ if (unlikely (!SUPER::resize (size)))
+ return false;
+ for (unsigned int i = 0; i < len; i++)
+ (*this)[i] = CFF_UNDEF_CODE;
+ count = 0;
+ return true;
+ }
+
+ bool identity (unsigned int size)
+ {
+ if (unlikely (!SUPER::resize (size)))
+ return false;
+ unsigned int i;
+ for (i = 0; i < len; i++)
+ (*this)[i] = i;
+ count = i;
+ return true;
+ }
+
+ bool excludes (hb_codepoint_t id) const
+ { return (id < len) && ((*this)[id] == CFF_UNDEF_CODE); }
+
+ bool includes (hb_codepoint_t id) const
+ { return !excludes (id); }
+
+ unsigned int add (unsigned int i)
+ {
+ if ((*this)[i] == CFF_UNDEF_CODE)
+ (*this)[i] = count++;
+ return (*this)[i];
+ }
+
+ hb_codepoint_t get_count () const { return count; }
+
+ protected:
+ hb_codepoint_t count;
+
+ private:
+ typedef hb_vector_t<hb_codepoint_t> SUPER;
+};
+
+template <typename COUNT>
+struct FDArray : CFFIndexOf<COUNT, FontDict>
+{
+ /* used by CFF1 */
+ template <typename DICTVAL, typename OP_SERIALIZER>
+ bool serialize (hb_serialize_context_t *c,
+ unsigned int offSize_,
+ const hb_vector_t<DICTVAL> &fontDicts,
+ OP_SERIALIZER& opszr)
+ {
+ TRACE_SERIALIZE (this);
+ if (unlikely (!c->extend_min (*this))) return_trace (false);
+ this->count.set (fontDicts.len);
+ this->offSize.set (offSize_);
+ if (!unlikely (c->allocate_size<HBUINT8> (offSize_ * (fontDicts.len + 1))))
+ return_trace (false);
+
+ /* serialize font dict offsets */
+ unsigned int offset = 1;
+ unsigned int fid = 0;
+ for (; fid < fontDicts.len; fid++)
+ {
+ CFFIndexOf<COUNT, FontDict>::set_offset_at (fid, offset);
+ offset += FontDict::calculate_serialized_size (fontDicts[fid], opszr);
+ }
+ CFFIndexOf<COUNT, FontDict>::set_offset_at (fid, offset);
+
+ /* serialize font dicts */
+ for (unsigned int i = 0; i < fontDicts.len; i++)
+ {
+ FontDict *dict = c->start_embed<FontDict> ();
+ if (unlikely (!dict->serialize (c, fontDicts[i], opszr, fontDicts[i])))
+ return_trace (false);
+ }
+ return_trace (true);
+ }
+
+ /* used by CFF2 */
+ template <typename DICTVAL, typename OP_SERIALIZER>
+ bool serialize (hb_serialize_context_t *c,
+ unsigned int offSize_,
+ const hb_vector_t<DICTVAL> &fontDicts,
+ unsigned int fdCount,
+ const Remap &fdmap,
+ OP_SERIALIZER& opszr,
+ const hb_vector_t<TableInfo> &privateInfos)
+ {
+ TRACE_SERIALIZE (this);
+ if (unlikely (!c->extend_min (*this))) return_trace (false);
+ this->count.set (fdCount);
+ this->offSize.set (offSize_);
+ if (!unlikely (c->allocate_size<HBUINT8> (offSize_ * (fdCount + 1))))
+ return_trace (false);
+
+ /* serialize font dict offsets */
+ unsigned int offset = 1;
+ unsigned int fid = 0;
+ for (unsigned i = 0; i < fontDicts.len; i++)
+ if (fdmap.includes (i))
+ {
+ CFFIndexOf<COUNT, FontDict>::set_offset_at (fid++, offset);
+ offset += FontDict::calculate_serialized_size (fontDicts[i], opszr);
+ }
+ CFFIndexOf<COUNT, FontDict>::set_offset_at (fid, offset);
+
+ /* serialize font dicts */
+ for (unsigned int i = 0; i < fontDicts.len; i++)
+ if (fdmap.includes (i))
+ {
+ FontDict *dict = c->start_embed<FontDict> ();
+ if (unlikely (!dict->serialize (c, fontDicts[i], opszr, privateInfos[fdmap[i]])))
+ return_trace (false);
+ }
+ return_trace (true);
+ }
+
+ /* in parallel to above */
+ template <typename OP_SERIALIZER, typename DICTVAL>
+ static unsigned int calculate_serialized_size (unsigned int &offSize_ /* OUT */,
+ const hb_vector_t<DICTVAL> &fontDicts,
+ unsigned int fdCount,
+ const Remap &fdmap,
+ OP_SERIALIZER& opszr)
+ {
+ unsigned int dictsSize = 0;
+ for (unsigned int i = 0; i < fontDicts.len; i++)
+ if (fdmap.includes (i))
+ dictsSize += FontDict::calculate_serialized_size (fontDicts[i], opszr);
+
+ offSize_ = calcOffSize (dictsSize);
+ return CFFIndex<COUNT>::calculate_serialized_size (offSize_, fdCount, dictsSize);
+ }
+};
+
+/* FDSelect */
+struct FDSelect0 {
+ bool sanitize (hb_sanitize_context_t *c, unsigned int fdcount) const
+ {
+ TRACE_SANITIZE (this);
+ if (unlikely (!(c->check_struct (this))))
+ return_trace (false);
+ for (unsigned int i = 0; i < c->get_num_glyphs (); i++)
+ if (unlikely (!fds[i].sanitize (c)))
+ return_trace (false);
+
+ return_trace (true);
+ }
+
+ hb_codepoint_t get_fd (hb_codepoint_t glyph) const
+ {
+ return (hb_codepoint_t)fds[glyph];
+ }
+
+ unsigned int get_size (unsigned int num_glyphs) const
+ { return HBUINT8::static_size * num_glyphs; }
+
+ HBUINT8 fds[VAR];
+
+ DEFINE_SIZE_MIN (1);
+};
+
+template <typename GID_TYPE, typename FD_TYPE>
+struct FDSelect3_4_Range {
+ bool sanitize (hb_sanitize_context_t *c, unsigned int fdcount) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (likely (c->check_struct (this) && (first < c->get_num_glyphs ()) && (fd < fdcount)));
+ }
+
+ GID_TYPE first;
+ FD_TYPE fd;
+
+ DEFINE_SIZE_STATIC (GID_TYPE::static_size + FD_TYPE::static_size);
+};
+
+template <typename GID_TYPE, typename FD_TYPE>
+struct FDSelect3_4 {
+ unsigned int get_size () const
+ { return GID_TYPE::static_size * 2 + FDSelect3_4_Range<GID_TYPE, FD_TYPE>::static_size * nRanges; }
+
+ bool sanitize (hb_sanitize_context_t *c, unsigned int fdcount) const
+ {
+ TRACE_SANITIZE (this);
+ if (unlikely (!(c->check_struct (this) && (nRanges > 0) && (ranges[0].first == 0))))
+ return_trace (false);
+
+ for (unsigned int i = 0; i < nRanges; i++)
+ {
+ if (unlikely (!ranges[i].sanitize (c, fdcount)))
+ return_trace (false);
+ if ((0 < i) && unlikely (ranges[i - 1].first >= ranges[i].first))
+ return_trace (false);
+ }
+ if (unlikely (!sentinel().sanitize (c) || (sentinel() != c->get_num_glyphs ())))
+ return_trace (false);
+
+ return_trace (true);
+ }
+
+ hb_codepoint_t get_fd (hb_codepoint_t glyph) const
+ {
+ unsigned int i;
+ for (i = 1; i < nRanges; i++)
+ if (glyph < ranges[i].first)
+ break;
+
+ return (hb_codepoint_t)ranges[i - 1].fd;
+ }
+
+ GID_TYPE &sentinel () { return StructAfter<GID_TYPE> (ranges[nRanges - 1]); }
+ const GID_TYPE &sentinel () const { return StructAfter<GID_TYPE> (ranges[nRanges - 1]); }
+
+ GID_TYPE nRanges;
+ FDSelect3_4_Range<GID_TYPE, FD_TYPE> ranges[VAR];
+ /* GID_TYPE sentinel */
+
+ DEFINE_SIZE_ARRAY (GID_TYPE::static_size, ranges);
+};
+
+typedef FDSelect3_4<HBUINT16, HBUINT8> FDSelect3;
+typedef FDSelect3_4_Range<HBUINT16, HBUINT8> FDSelect3_Range;
+
+struct FDSelect {
+ bool sanitize (hb_sanitize_context_t *c, unsigned int fdcount) const
+ {
+ TRACE_SANITIZE (this);
+
+ return_trace (likely (c->check_struct (this) && (format == 0 || format == 3) &&
+ (format == 0)?
+ u.format0.sanitize (c, fdcount):
+ u.format3.sanitize (c, fdcount)));
+ }
+
+ bool serialize (hb_serialize_context_t *c, const FDSelect &src, unsigned int num_glyphs)
+ {
+ TRACE_SERIALIZE (this);
+ unsigned int size = src.get_size (num_glyphs);
+ FDSelect *dest = c->allocate_size<FDSelect> (size);
+ if (unlikely (dest == nullptr)) return_trace (false);
+ memcpy (dest, &src, size);
+ return_trace (true);
+ }
+
+ unsigned int calculate_serialized_size (unsigned int num_glyphs) const
+ { return get_size (num_glyphs); }
+
+ unsigned int get_size (unsigned int num_glyphs) const
+ {
+ unsigned int size = format.static_size;
+ if (format == 0)
+ size += u.format0.get_size (num_glyphs);
+ else
+ size += u.format3.get_size ();
+ return size;
+ }
+
+ hb_codepoint_t get_fd (hb_codepoint_t glyph) const
+ {
+ if (this == &Null(FDSelect))
+ return 0;
+ if (format == 0)
+ return u.format0.get_fd (glyph);
+ else
+ return u.format3.get_fd (glyph);
+ }
+
+ HBUINT8 format;
+ union {
+ FDSelect0 format0;
+ FDSelect3 format3;
+ } u;
+
+ DEFINE_SIZE_MIN (1);
+};
+
+template <typename COUNT>
+struct Subrs : CFFIndex<COUNT>
+{
+ typedef COUNT count_type;
+ typedef CFFIndex<COUNT> SUPER;
+};
+
+} /* namespace CFF */
+
+#endif /* HB_OT_CFF_COMMON_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff1-table.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff1-table.cc
new file mode 100644
index 00000000000..51cecb6f5b4
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff1-table.cc
@@ -0,0 +1,385 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+
+#include "hb-ot-cff1-table.hh"
+#include "hb-cff1-interp-cs.hh"
+
+using namespace CFF;
+
+/* SID to code */
+static const uint8_t standard_encoding_to_code [] =
+{
+ 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+ 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 177,
+ 178, 179, 180, 182, 183, 184, 185, 186, 187, 188, 189, 191, 193, 194, 195, 196,
+ 197, 198, 199, 200, 202, 203, 205, 206, 207, 208, 225, 227, 232, 233, 234, 235,
+ 241, 245, 248, 249, 250, 251
+};
+
+/* SID to code */
+static const uint8_t expert_encoding_to_code [] =
+{
+ 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 46,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 59, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 88, 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, 201, 0, 0, 0, 0, 189, 0, 0, 188, 0,
+ 0, 0, 0, 190, 202, 0, 0, 0, 0, 203, 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,
+ 0, 0, 0, 0, 0, 33, 34, 36, 37, 38, 39, 40, 41, 42, 43, 48,
+ 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 61, 62, 63, 65, 66, 67,
+ 68, 69, 73, 76, 77, 78, 79, 82, 83, 84, 86, 89, 90, 91, 93, 94,
+ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+ 161, 162, 163, 166, 167, 168, 169, 170, 172, 175, 178, 179, 182, 183, 184, 191,
+ 192, 193, 194, 195, 196, 197, 200, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
+ 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
+ 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255
+};
+
+/* glyph ID to SID */
+static const uint16_t expert_charset_to_sid [] =
+{
+ 0, 1, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 13, 14, 15, 99,
+ 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 27, 28, 249, 250, 251, 252,
+ 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 109, 110,
+ 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
+ 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, 316, 317, 318, 158, 155, 163, 319, 320, 321, 322, 323, 324, 325, 326, 150,
+ 164, 169, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
+ 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356,
+ 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
+ 373, 374, 375, 376, 377, 378
+};
+
+/* glyph ID to SID */
+static const uint16_t expert_subset_charset_to_sid [] =
+{
+ 0, 1, 231, 232, 235, 236, 237, 238, 13, 14, 15, 99, 239, 240, 241, 242,
+ 243, 244, 245, 246, 247, 248, 27, 28, 249, 250, 251, 253, 254, 255, 256, 257,
+ 258, 259, 260, 261, 262, 263, 264, 265, 266, 109, 110, 267, 268, 269, 270, 272,
+ 300, 301, 302, 305, 314, 315, 158, 155, 163, 320, 321, 322, 323, 324, 325, 326,
+ 150, 164, 169, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
+ 340, 341, 342, 343, 344, 345, 346
+};
+
+/* code to SID */
+static const uint8_t standard_encoding_to_sid [] =
+{
+ 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,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 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, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ 0, 111, 112, 113, 114, 0, 115, 116, 117, 118, 119, 120, 121, 122, 0, 123,
+ 0, 124, 125, 126, 127, 128, 129, 130, 131, 0, 132, 133, 0, 134, 135, 136,
+ 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 138, 0, 139, 0, 0, 0, 0, 140, 141, 142, 143, 0, 0, 0, 0,
+ 0, 144, 0, 0, 0, 145, 0, 0, 146, 147, 148, 149, 0, 0, 0, 0
+};
+
+hb_codepoint_t OT::cff1::lookup_standard_encoding_for_code (hb_codepoint_t sid)
+{
+ if (sid < ARRAY_LENGTH (standard_encoding_to_code))
+ return (hb_codepoint_t)standard_encoding_to_code[sid];
+ else
+ return 0;
+}
+
+hb_codepoint_t OT::cff1::lookup_expert_encoding_for_code (hb_codepoint_t sid)
+{
+ if (sid < ARRAY_LENGTH (expert_encoding_to_code))
+ return (hb_codepoint_t)expert_encoding_to_code[sid];
+ else
+ return 0;
+}
+
+hb_codepoint_t OT::cff1::lookup_expert_charset_for_sid (hb_codepoint_t glyph)
+{
+ if (glyph < ARRAY_LENGTH (expert_charset_to_sid))
+ return (hb_codepoint_t)expert_charset_to_sid[glyph];
+ else
+ return 0;
+}
+
+hb_codepoint_t OT::cff1::lookup_expert_subset_charset_for_sid (hb_codepoint_t glyph)
+{
+ if (glyph < ARRAY_LENGTH (expert_subset_charset_to_sid))
+ return (hb_codepoint_t)expert_subset_charset_to_sid[glyph];
+ else
+ return 0;
+}
+
+hb_codepoint_t OT::cff1::lookup_standard_encoding_for_sid (hb_codepoint_t code)
+{
+ if (code < ARRAY_LENGTH (standard_encoding_to_sid))
+ return (hb_codepoint_t)standard_encoding_to_sid[code];
+ else
+ return CFF_UNDEF_SID;
+}
+
+struct Bounds
+{
+ void init ()
+ {
+ min.set_int (0x7FFFFFFF, 0x7FFFFFFF);
+ max.set_int (-0x80000000, -0x80000000);
+ }
+
+ void update (const Point &pt)
+ {
+ if (pt.x < min.x) min.x = pt.x;
+ if (pt.x > max.x) max.x = pt.x;
+ if (pt.y < min.y) min.y = pt.y;
+ if (pt.y > max.y) max.y = pt.y;
+ }
+
+ void merge (const Bounds &b)
+ {
+ if (empty ())
+ *this = b;
+ else if (!b.empty ())
+ {
+ if (b.min.x < min.x) min.x = b.min.x;
+ if (b.max.x > max.x) max.x = b.max.x;
+ if (b.min.y < min.y) min.y = b.min.y;
+ if (b.max.y > max.y) max.y = b.max.y;
+ }
+ }
+
+ void offset (const Point &delta)
+ {
+ if (!empty ())
+ {
+ min.move (delta);
+ max.move (delta);
+ }
+ }
+
+ bool empty () const
+ { return (min.x >= max.x) || (min.y >= max.y); }
+
+ Point min;
+ Point max;
+};
+
+struct ExtentsParam
+{
+ void init (const OT::cff1::accelerator_t *_cff)
+ {
+ path_open = false;
+ cff = _cff;
+ bounds.init ();
+ }
+
+ void start_path () { path_open = true; }
+ void end_path () { path_open = false; }
+ bool is_path_open () const { return path_open; }
+
+ bool path_open;
+ Bounds bounds;
+
+ const OT::cff1::accelerator_t *cff;
+};
+
+struct CFF1PathProcs_Extents : PathProcs<CFF1PathProcs_Extents, CFF1CSInterpEnv, ExtentsParam>
+{
+ static void moveto (CFF1CSInterpEnv &env, ExtentsParam& param, const Point &pt)
+ {
+ param.end_path ();
+ env.moveto (pt);
+ }
+
+ static void line (CFF1CSInterpEnv &env, ExtentsParam& param, const Point &pt1)
+ {
+ if (!param.is_path_open ())
+ {
+ param.start_path ();
+ param.bounds.update (env.get_pt ());
+ }
+ env.moveto (pt1);
+ param.bounds.update (env.get_pt ());
+ }
+
+ static void curve (CFF1CSInterpEnv &env, ExtentsParam& param, const Point &pt1, const Point &pt2, const Point &pt3)
+ {
+ if (!param.is_path_open ())
+ {
+ param.start_path ();
+ param.bounds.update (env.get_pt ());
+ }
+ /* include control points */
+ param.bounds.update (pt1);
+ param.bounds.update (pt2);
+ env.moveto (pt3);
+ param.bounds.update (env.get_pt ());
+ }
+};
+
+static bool _get_bounds (const OT::cff1::accelerator_t *cff, hb_codepoint_t glyph, Bounds &bounds, bool in_seac=false);
+
+struct CFF1CSOpSet_Extents : CFF1CSOpSet<CFF1CSOpSet_Extents, ExtentsParam, CFF1PathProcs_Extents>
+{
+ static void process_seac (CFF1CSInterpEnv &env, ExtentsParam& param)
+ {
+ unsigned int n = env.argStack.get_count ();
+ Point delta;
+ delta.x = env.argStack[n-4];
+ delta.y = env.argStack[n-3];
+ hb_codepoint_t base = param.cff->std_code_to_glyph (env.argStack[n-2].to_int ());
+ hb_codepoint_t accent = param.cff->std_code_to_glyph (env.argStack[n-1].to_int ());
+
+ Bounds base_bounds, accent_bounds;
+ if (likely (!env.in_seac && base && accent
+ && _get_bounds (param.cff, base, base_bounds, true)
+ && _get_bounds (param.cff, accent, accent_bounds, true)))
+ {
+ param.bounds.merge (base_bounds);
+ accent_bounds.offset (delta);
+ param.bounds.merge (accent_bounds);
+ }
+ else
+ env.set_error ();
+ }
+};
+
+bool _get_bounds (const OT::cff1::accelerator_t *cff, hb_codepoint_t glyph, Bounds &bounds, bool in_seac)
+{
+ bounds.init ();
+ if (unlikely (!cff->is_valid () || (glyph >= cff->num_glyphs))) return false;
+
+ unsigned int fd = cff->fdSelect->get_fd (glyph);
+ CFF1CSInterpreter<CFF1CSOpSet_Extents, ExtentsParam> interp;
+ const ByteStr str = (*cff->charStrings)[glyph];
+ interp.env.init (str, *cff, fd);
+ interp.env.set_in_seac (in_seac);
+ ExtentsParam param;
+ param.init (cff);
+ if (unlikely (!interp.interpret (param))) return false;
+ bounds = param.bounds;
+ return true;
+}
+
+bool OT::cff1::accelerator_t::get_extents (hb_codepoint_t glyph, hb_glyph_extents_t *extents) const
+{
+ Bounds bounds;
+
+ if (!_get_bounds (this, glyph, bounds))
+ return false;
+
+ if (bounds.min.x >= bounds.max.x)
+ {
+ extents->width = 0;
+ extents->x_bearing = 0;
+ }
+ else
+ {
+ extents->x_bearing = (int32_t)bounds.min.x.floor ();
+ extents->width = (int32_t)bounds.max.x.ceil () - extents->x_bearing;
+ }
+ if (bounds.min.y >= bounds.max.y)
+ {
+ extents->height = 0;
+ extents->y_bearing = 0;
+ }
+ else
+ {
+ extents->y_bearing = (int32_t)bounds.max.y.ceil ();
+ extents->height = (int32_t)bounds.min.y.floor () - extents->y_bearing;
+ }
+
+ return true;
+}
+
+struct GetSeacParam
+{
+ void init (const OT::cff1::accelerator_t *_cff)
+ {
+ cff = _cff;
+ base = 0;
+ accent = 0;
+ }
+
+ bool has_seac () const { return base && accent; }
+
+ const OT::cff1::accelerator_t *cff;
+ hb_codepoint_t base;
+ hb_codepoint_t accent;
+};
+
+struct CFF1CSOpSet_Seac : CFF1CSOpSet<CFF1CSOpSet_Seac, GetSeacParam>
+{
+ static void process_seac (CFF1CSInterpEnv &env, GetSeacParam& param)
+ {
+ unsigned int n = env.argStack.get_count ();
+ hb_codepoint_t base_char = (hb_codepoint_t)env.argStack[n-2].to_int ();
+ hb_codepoint_t accent_char = (hb_codepoint_t)env.argStack[n-1].to_int ();
+
+ param.base = param.cff->std_code_to_glyph (base_char);
+ param.accent = param.cff->std_code_to_glyph (accent_char);
+ }
+};
+
+bool OT::cff1::accelerator_t::get_seac_components (hb_codepoint_t glyph, hb_codepoint_t *base, hb_codepoint_t *accent) const
+{
+ if (unlikely (!is_valid () || (glyph >= num_glyphs))) return false;
+
+ unsigned int fd = fdSelect->get_fd (glyph);
+ CFF1CSInterpreter<CFF1CSOpSet_Seac, GetSeacParam> interp;
+ const ByteStr str = (*charStrings)[glyph];
+ interp.env.init (str, *this, fd);
+ GetSeacParam param;
+ param.init (this);
+ if (unlikely (!interp.interpret (param))) return false;
+
+ if (param.has_seac ())
+ {
+ *base = param.base;
+ *accent = param.accent;
+ return true;
+ }
+ return false;
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff1-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff1-table.hh
new file mode 100644
index 00000000000..72dc0ef3e01
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff1-table.hh
@@ -0,0 +1,1300 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+
+#ifndef HB_OT_CFF1_TABLE_HH
+#define HB_OT_CFF1_TABLE_HH
+
+#include "hb-ot-head-table.hh"
+#include "hb-ot-cff-common.hh"
+#include "hb-subset-cff1.hh"
+
+namespace CFF {
+
+/*
+ * CFF -- Compact Font Format (CFF)
+ * http://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5176.CFF.pdf
+ */
+#define HB_OT_TAG_cff1 HB_TAG('C','F','F',' ')
+
+#define CFF_UNDEF_SID CFF_UNDEF_CODE
+
+enum EncodingID { StandardEncoding = 0, ExpertEncoding = 1 };
+enum CharsetID { ISOAdobeCharset = 0, ExpertCharset = 1, ExpertSubsetCharset = 2 };
+
+typedef CFFIndex<HBUINT16> CFF1Index;
+template <typename Type> struct CFF1IndexOf : CFFIndexOf<HBUINT16, Type> {};
+
+typedef CFFIndex<HBUINT16> CFF1Index;
+typedef CFF1Index CFF1CharStrings;
+typedef FDArray<HBUINT16> CFF1FDArray;
+typedef Subrs<HBUINT16> CFF1Subrs;
+
+struct CFF1FDSelect : FDSelect {};
+
+/* Encoding */
+struct Encoding0 {
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && codes[nCodes - 1].sanitize (c));
+ }
+
+ hb_codepoint_t get_code (hb_codepoint_t glyph) const
+ {
+ assert (glyph > 0);
+ glyph--;
+ if (glyph < nCodes)
+ {
+ return (hb_codepoint_t)codes[glyph];
+ }
+ else
+ return CFF_UNDEF_CODE;
+ }
+
+ unsigned int get_size () const
+ { return HBUINT8::static_size * (nCodes + 1); }
+
+ HBUINT8 nCodes;
+ HBUINT8 codes[VAR];
+
+ DEFINE_SIZE_ARRAY(1, codes);
+};
+
+struct Encoding1_Range {
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ HBUINT8 first;
+ HBUINT8 nLeft;
+
+ DEFINE_SIZE_STATIC (2);
+};
+
+struct Encoding1 {
+ unsigned int get_size () const
+ { return HBUINT8::static_size + Encoding1_Range::static_size * nRanges; }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && ((nRanges == 0) || (ranges[nRanges - 1]).sanitize (c)));
+ }
+
+ hb_codepoint_t get_code (hb_codepoint_t glyph) const
+ {
+ assert (glyph > 0);
+ glyph--;
+ for (unsigned int i = 0; i < nRanges; i++)
+ {
+ if (glyph <= ranges[i].nLeft)
+ {
+ return (hb_codepoint_t)ranges[i].first + glyph;
+ }
+ glyph -= (ranges[i].nLeft + 1);
+ }
+ return CFF_UNDEF_CODE;
+ }
+
+ HBUINT8 nRanges;
+ Encoding1_Range ranges[VAR];
+
+ DEFINE_SIZE_ARRAY (1, ranges);
+};
+
+struct SuppEncoding {
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ HBUINT8 code;
+ HBUINT16 glyph;
+
+ DEFINE_SIZE_STATIC (3);
+};
+
+struct CFF1SuppEncData {
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && ((nSups == 0) || (supps[nSups - 1]).sanitize (c)));
+ }
+
+ void get_codes (hb_codepoint_t sid, hb_vector_t<hb_codepoint_t> &codes) const
+ {
+ for (unsigned int i = 0; i < nSups; i++)
+ if (sid == supps[i].glyph)
+ codes.push (supps[i].code);
+ }
+
+ unsigned int get_size () const
+ { return HBUINT8::static_size + SuppEncoding::static_size * nSups; }
+
+ HBUINT8 nSups;
+ SuppEncoding supps[VAR];
+
+ DEFINE_SIZE_ARRAY (1, supps);
+};
+
+struct Encoding {
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+
+ if (unlikely (!c->check_struct (this)))
+ return_trace (false);
+ unsigned int fmt = format & 0x7F;
+ if (unlikely (fmt > 1))
+ return_trace (false);
+ if (unlikely (!((fmt == 0)? u.format0.sanitize (c): u.format1.sanitize (c))))
+ return_trace (false);
+ return_trace (((format & 0x80) == 0) || suppEncData ().sanitize (c));
+ }
+
+ /* serialize a fullset Encoding */
+ bool serialize (hb_serialize_context_t *c, const Encoding &src)
+ {
+ TRACE_SERIALIZE (this);
+ unsigned int size = src.get_size ();
+ Encoding *dest = c->allocate_size<Encoding> (size);
+ if (unlikely (dest == nullptr)) return_trace (false);
+ memcpy (dest, &src, size);
+ return_trace (true);
+ }
+
+ /* serialize a subset Encoding */
+ bool serialize (hb_serialize_context_t *c,
+ uint8_t format,
+ unsigned int enc_count,
+ const hb_vector_t<code_pair>& code_ranges,
+ const hb_vector_t<code_pair>& supp_codes)
+ {
+ TRACE_SERIALIZE (this);
+ Encoding *dest = c->extend_min (*this);
+ if (unlikely (dest == nullptr)) return_trace (false);
+ dest->format.set (format | ((supp_codes.len > 0)? 0x80: 0));
+ if (format == 0)
+ {
+ Encoding0 *fmt0 = c->allocate_size<Encoding0> (Encoding0::min_size + HBUINT8::static_size * enc_count);
+ if (unlikely (fmt0 == nullptr)) return_trace (false);
+ fmt0->nCodes.set (enc_count);
+ unsigned int glyph = 0;
+ for (unsigned int i = 0; i < code_ranges.len; i++)
+ {
+ hb_codepoint_t code = code_ranges[i].code;
+ for (int left = (int)code_ranges[i].glyph; left >= 0; left--)
+ fmt0->codes[glyph++].set (code++);
+ if (unlikely (!((glyph <= 0x100) && (code <= 0x100))))
+ return_trace (false);
+ }
+ }
+ else
+ {
+ Encoding1 *fmt1 = c->allocate_size<Encoding1> (Encoding1::min_size + Encoding1_Range::static_size * code_ranges.len);
+ if (unlikely (fmt1 == nullptr)) return_trace (false);
+ fmt1->nRanges.set (code_ranges.len);
+ for (unsigned int i = 0; i < code_ranges.len; i++)
+ {
+ if (unlikely (!((code_ranges[i].code <= 0xFF) && (code_ranges[i].glyph <= 0xFF))))
+ return_trace (false);
+ fmt1->ranges[i].first.set (code_ranges[i].code);
+ fmt1->ranges[i].nLeft.set (code_ranges[i].glyph);
+ }
+ }
+ if (supp_codes.len > 0)
+ {
+ CFF1SuppEncData *suppData = c->allocate_size<CFF1SuppEncData> (CFF1SuppEncData::min_size + SuppEncoding::static_size * supp_codes.len);
+ if (unlikely (suppData == nullptr)) return_trace (false);
+ suppData->nSups.set (supp_codes.len);
+ for (unsigned int i = 0; i < supp_codes.len; i++)
+ {
+ suppData->supps[i].code.set (supp_codes[i].code);
+ suppData->supps[i].glyph.set (supp_codes[i].glyph); /* actually SID */
+ }
+ }
+ return_trace (true);
+ }
+
+ /* parallel to above: calculate the size of a subset Encoding */
+ static unsigned int calculate_serialized_size (uint8_t format,
+ unsigned int enc_count,
+ unsigned int supp_count)
+ {
+ unsigned int size = min_size;
+ if (format == 0)
+ size += Encoding0::min_size + HBUINT8::static_size * enc_count;
+ else
+ size += Encoding1::min_size + Encoding1_Range::static_size * enc_count;
+ if (supp_count > 0)
+ size += CFF1SuppEncData::min_size + SuppEncoding::static_size * supp_count;
+ return size;
+ }
+
+ unsigned int get_size () const
+ {
+ unsigned int size = min_size;
+ if (table_format () == 0)
+ size += u.format0.get_size ();
+ else
+ size += u.format1.get_size ();
+ if (has_supplement ())
+ size += suppEncData ().get_size ();
+ return size;
+ }
+
+ hb_codepoint_t get_code (hb_codepoint_t glyph) const
+ {
+ if (table_format () == 0)
+ return u.format0.get_code (glyph);
+ else
+ return u.format1.get_code (glyph);
+ }
+
+ uint8_t table_format () const { return (format & 0x7F); }
+ bool has_supplement () const { return (format & 0x80) != 0; }
+
+ void get_supplement_codes (hb_codepoint_t sid, hb_vector_t<hb_codepoint_t> &codes) const
+ {
+ codes.resize (0);
+ if (has_supplement ())
+ suppEncData().get_codes (sid, codes);
+ }
+
+ protected:
+ const CFF1SuppEncData &suppEncData () const
+ {
+ if ((format & 0x7F) == 0)
+ return StructAfter<CFF1SuppEncData> (u.format0.codes[u.format0.nCodes-1]);
+ else
+ return StructAfter<CFF1SuppEncData> (u.format1.ranges[u.format1.nRanges-1]);
+ }
+
+ public:
+ HBUINT8 format;
+
+ union {
+ Encoding0 format0;
+ Encoding1 format1;
+ } u;
+ /* CFF1SuppEncData suppEncData; */
+
+ DEFINE_SIZE_MIN (1);
+};
+
+/* Charset */
+struct Charset0 {
+ bool sanitize (hb_sanitize_context_t *c, unsigned int num_glyphs) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && sids[num_glyphs - 1].sanitize (c));
+ }
+
+ hb_codepoint_t get_sid (hb_codepoint_t glyph) const
+ {
+ if (glyph == 0)
+ return 0;
+ else
+ return sids[glyph - 1];
+ }
+
+ hb_codepoint_t get_glyph (hb_codepoint_t sid, unsigned int num_glyphs) const
+ {
+ if (sid == 0)
+ return 0;
+
+ for (unsigned int glyph = 1; glyph < num_glyphs; glyph++)
+ {
+ if (sids[glyph-1] == sid)
+ return glyph;
+ }
+ return 0;
+ }
+
+ unsigned int get_size (unsigned int num_glyphs) const
+ {
+ assert (num_glyphs > 0);
+ return HBUINT16::static_size * (num_glyphs - 1);
+ }
+
+ HBUINT16 sids[VAR];
+
+ DEFINE_SIZE_ARRAY(0, sids);
+};
+
+template <typename TYPE>
+struct Charset_Range {
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ HBUINT16 first;
+ TYPE nLeft;
+
+ DEFINE_SIZE_STATIC (HBUINT16::static_size + TYPE::static_size);
+};
+
+template <typename TYPE>
+struct Charset1_2 {
+ bool sanitize (hb_sanitize_context_t *c, unsigned int num_glyphs) const
+ {
+ TRACE_SANITIZE (this);
+ if (unlikely (!c->check_struct (this)))
+ return_trace (false);
+ num_glyphs--;
+ for (unsigned int i = 0; num_glyphs > 0; i++)
+ {
+ if (unlikely (!ranges[i].sanitize (c) || (num_glyphs < ranges[i].nLeft + 1)))
+ return_trace (false);
+ num_glyphs -= (ranges[i].nLeft + 1);
+ }
+ return_trace (true);
+ }
+
+ hb_codepoint_t get_sid (hb_codepoint_t glyph) const
+ {
+ if (glyph == 0) return 0;
+ glyph--;
+ for (unsigned int i = 0;; i++)
+ {
+ if (glyph <= ranges[i].nLeft)
+ return (hb_codepoint_t)ranges[i].first + glyph;
+ glyph -= (ranges[i].nLeft + 1);
+ }
+
+ return 0;
+ }
+
+ hb_codepoint_t get_glyph (hb_codepoint_t sid, unsigned int num_glyphs) const
+ {
+ if (sid == 0) return 0;
+ hb_codepoint_t glyph = 1;
+ for (unsigned int i = 0;; i++)
+ {
+ if (glyph >= num_glyphs)
+ return 0;
+ if ((ranges[i].first <= sid) && (sid <= ranges[i].first + ranges[i].nLeft))
+ return glyph + (sid - ranges[i].first);
+ glyph += (ranges[i].nLeft + 1);
+ }
+
+ return 0;
+ }
+
+ unsigned int get_size (unsigned int num_glyphs) const
+ {
+ unsigned int size = HBUINT8::static_size;
+ int glyph = (int)num_glyphs;
+
+ assert (glyph > 0);
+ glyph--;
+ for (unsigned int i = 0; glyph > 0; i++)
+ {
+ glyph -= (ranges[i].nLeft + 1);
+ size += Charset_Range<TYPE>::static_size;
+ }
+
+ return size;
+ }
+
+ Charset_Range<TYPE> ranges[VAR];
+
+ DEFINE_SIZE_ARRAY (0, ranges);
+};
+
+typedef Charset1_2<HBUINT8> Charset1;
+typedef Charset1_2<HBUINT16> Charset2;
+typedef Charset_Range<HBUINT8> Charset1_Range;
+typedef Charset_Range<HBUINT16> Charset2_Range;
+
+struct Charset {
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+
+ if (unlikely (!c->check_struct (this)))
+ return_trace (false);
+ if (format == 0)
+ return_trace (u.format0.sanitize (c, c->get_num_glyphs ()));
+ else if (format == 1)
+ return_trace (u.format1.sanitize (c, c->get_num_glyphs ()));
+ else if (likely (format == 2))
+ return_trace (u.format2.sanitize (c, c->get_num_glyphs ()));
+ else
+ return_trace (false);
+ }
+
+ /* serialize a fullset Charset */
+ bool serialize (hb_serialize_context_t *c, const Charset &src, unsigned int num_glyphs)
+ {
+ TRACE_SERIALIZE (this);
+ unsigned int size = src.get_size (num_glyphs);
+ Charset *dest = c->allocate_size<Charset> (size);
+ if (unlikely (dest == nullptr)) return_trace (false);
+ memcpy (dest, &src, size);
+ return_trace (true);
+ }
+
+ /* serialize a subset Charset */
+ bool serialize (hb_serialize_context_t *c,
+ uint8_t format,
+ unsigned int num_glyphs,
+ const hb_vector_t<code_pair>& sid_ranges)
+ {
+ TRACE_SERIALIZE (this);
+ Charset *dest = c->extend_min (*this);
+ if (unlikely (dest == nullptr)) return_trace (false);
+ dest->format.set (format);
+ if (format == 0)
+ {
+ Charset0 *fmt0 = c->allocate_size<Charset0> (Charset0::min_size + HBUINT16::static_size * (num_glyphs - 1));
+ if (unlikely (fmt0 == nullptr)) return_trace (false);
+ unsigned int glyph = 0;
+ for (unsigned int i = 0; i < sid_ranges.len; i++)
+ {
+ hb_codepoint_t sid = sid_ranges[i].code;
+ for (int left = (int)sid_ranges[i].glyph; left >= 0; left--)
+ fmt0->sids[glyph++].set (sid++);
+ }
+ }
+ else if (format == 1)
+ {
+ Charset1 *fmt1 = c->allocate_size<Charset1> (Charset1::min_size + Charset1_Range::static_size * sid_ranges.len);
+ if (unlikely (fmt1 == nullptr)) return_trace (false);
+ for (unsigned int i = 0; i < sid_ranges.len; i++)
+ {
+ if (unlikely (!(sid_ranges[i].glyph <= 0xFF)))
+ return_trace (false);
+ fmt1->ranges[i].first.set (sid_ranges[i].code);
+ fmt1->ranges[i].nLeft.set (sid_ranges[i].glyph);
+ }
+ }
+ else /* format 2 */
+ {
+ Charset2 *fmt2 = c->allocate_size<Charset2> (Charset2::min_size + Charset2_Range::static_size * sid_ranges.len);
+ if (unlikely (fmt2 == nullptr)) return_trace (false);
+ for (unsigned int i = 0; i < sid_ranges.len; i++)
+ {
+ if (unlikely (!(sid_ranges[i].glyph <= 0xFFFF)))
+ return_trace (false);
+ fmt2->ranges[i].first.set (sid_ranges[i].code);
+ fmt2->ranges[i].nLeft.set (sid_ranges[i].glyph);
+ }
+ }
+ return_trace (true);
+ }
+
+ /* parallel to above: calculate the size of a subset Charset */
+ static unsigned int calculate_serialized_size (
+ uint8_t format,
+ unsigned int count)
+ {
+ unsigned int size = min_size;
+ if (format == 0)
+ size += Charset0::min_size + HBUINT16::static_size * (count - 1);
+ else if (format == 1)
+ size += Charset1::min_size + Charset1_Range::static_size * count;
+ else
+ size += Charset2::min_size + Charset2_Range::static_size * count;
+
+ return size;
+ }
+
+ unsigned int get_size (unsigned int num_glyphs) const
+ {
+ unsigned int size = min_size;
+ if (format == 0)
+ size += u.format0.get_size (num_glyphs);
+ else if (format == 1)
+ size += u.format1.get_size (num_glyphs);
+ else
+ size += u.format2.get_size (num_glyphs);
+ return size;
+ }
+
+ hb_codepoint_t get_sid (hb_codepoint_t glyph) const
+ {
+ if (format == 0)
+ return u.format0.get_sid (glyph);
+ else if (format == 1)
+ return u.format1.get_sid (glyph);
+ else
+ return u.format2.get_sid (glyph);
+ }
+
+ hb_codepoint_t get_glyph (hb_codepoint_t sid, unsigned int num_glyphs) const
+ {
+ if (format == 0)
+ return u.format0.get_glyph (sid, num_glyphs);
+ else if (format == 1)
+ return u.format1.get_glyph (sid, num_glyphs);
+ else
+ return u.format2.get_glyph (sid, num_glyphs);
+ }
+
+ HBUINT8 format;
+ union {
+ Charset0 format0;
+ Charset1 format1;
+ Charset2 format2;
+ } u;
+
+ DEFINE_SIZE_MIN (1);
+};
+
+struct CFF1StringIndex : CFF1Index
+{
+ bool serialize (hb_serialize_context_t *c, const CFF1StringIndex &strings,
+ unsigned int offSize_, const Remap &sidmap)
+ {
+ TRACE_SERIALIZE (this);
+ if (unlikely ((strings.count == 0) || (sidmap.get_count () == 0)))
+ {
+ if (!unlikely (c->extend_min (this->count)))
+ return_trace (false);
+ count.set (0);
+ return_trace (true);
+ }
+
+ ByteStrArray bytesArray;
+ bytesArray.init ();
+ if (!bytesArray.resize (sidmap.get_count ()))
+ return_trace (false);
+ for (unsigned int i = 0; i < strings.count; i++)
+ {
+ hb_codepoint_t j = sidmap[i];
+ if (j != CFF_UNDEF_CODE)
+ bytesArray[j] = strings[i];
+ }
+
+ bool result = CFF1Index::serialize (c, offSize_, bytesArray);
+ bytesArray.fini ();
+ return_trace (result);
+ }
+
+ /* in parallel to above */
+ unsigned int calculate_serialized_size (unsigned int &offSize /*OUT*/, const Remap &sidmap) const
+ {
+ offSize = 0;
+ if ((count == 0) || (sidmap.get_count () == 0))
+ return count.static_size;
+
+ unsigned int dataSize = 0;
+ for (unsigned int i = 0; i < count; i++)
+ if (sidmap[i] != CFF_UNDEF_CODE)
+ dataSize += length_at (i);
+
+ offSize = calcOffSize(dataSize);
+ return CFF1Index::calculate_serialized_size (offSize, sidmap.get_count (), dataSize);
+ }
+};
+
+struct CFF1TopDictInterpEnv : NumInterpEnv
+{
+ CFF1TopDictInterpEnv ()
+ : NumInterpEnv(), prev_offset(0), last_offset(0) {}
+
+ unsigned int prev_offset;
+ unsigned int last_offset;
+};
+
+struct NameDictValues
+{
+ enum NameDictValIndex
+ {
+ version,
+ notice,
+ copyright,
+ fullName,
+ familyName,
+ weight,
+ postscript,
+ fontName,
+ baseFontName,
+ registry,
+ ordering,
+
+ ValCount
+ };
+
+ void init ()
+ {
+ for (unsigned int i = 0; i < ValCount; i++)
+ values[i] = CFF_UNDEF_SID;
+ }
+
+ unsigned int& operator[] (unsigned int i)
+ { assert (i < ValCount); return values[i]; }
+
+ unsigned int operator[] (unsigned int i) const
+ { assert (i < ValCount); return values[i]; }
+
+ static enum NameDictValIndex name_op_to_index (OpCode op)
+ {
+ switch (op) {
+ default: // can't happen - just make some compiler happy
+ case OpCode_version:
+ return version;
+ case OpCode_Notice:
+ return notice;
+ case OpCode_Copyright:
+ return copyright;
+ case OpCode_FullName:
+ return fullName;
+ case OpCode_FamilyName:
+ return familyName;
+ case OpCode_Weight:
+ return weight;
+ case OpCode_PostScript:
+ return postscript;
+ case OpCode_FontName:
+ return fontName;
+ case OpCode_BaseFontName:
+ return baseFontName;
+ }
+ }
+
+ unsigned int values[ValCount];
+};
+
+struct CFF1TopDictVal : OpStr
+{
+ unsigned int last_arg_offset;
+};
+
+struct CFF1TopDictValues : TopDictValues<CFF1TopDictVal>
+{
+ void init ()
+ {
+ TopDictValues<CFF1TopDictVal>::init ();
+
+ nameSIDs.init ();
+ ros_supplement = 0;
+ cidCount = 8720;
+ EncodingOffset = 0;
+ CharsetOffset = 0;
+ FDSelectOffset = 0;
+ privateDictInfo.init ();
+ }
+ void fini () { TopDictValues<CFF1TopDictVal>::fini (); }
+
+ bool is_CID () const
+ { return nameSIDs[NameDictValues::registry] != CFF_UNDEF_SID; }
+
+ NameDictValues nameSIDs;
+ unsigned int ros_supplement_offset;
+ unsigned int ros_supplement;
+ unsigned int cidCount;
+
+ unsigned int EncodingOffset;
+ unsigned int CharsetOffset;
+ unsigned int FDSelectOffset;
+ TableInfo privateDictInfo;
+};
+
+struct CFF1TopDictOpSet : TopDictOpSet<CFF1TopDictVal>
+{
+ static void process_op (OpCode op, CFF1TopDictInterpEnv& env, CFF1TopDictValues& dictval)
+ {
+ CFF1TopDictVal val;
+ val.last_arg_offset = (env.last_offset-1) - dictval.opStart; /* offset to the last argument */
+
+ switch (op) {
+ case OpCode_version:
+ case OpCode_Notice:
+ case OpCode_Copyright:
+ case OpCode_FullName:
+ case OpCode_FamilyName:
+ case OpCode_Weight:
+ case OpCode_PostScript:
+ case OpCode_BaseFontName:
+ dictval.nameSIDs[NameDictValues::name_op_to_index (op)] = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+ case OpCode_isFixedPitch:
+ case OpCode_ItalicAngle:
+ case OpCode_UnderlinePosition:
+ case OpCode_UnderlineThickness:
+ case OpCode_PaintType:
+ case OpCode_CharstringType:
+ case OpCode_UniqueID:
+ case OpCode_StrokeWidth:
+ case OpCode_SyntheticBase:
+ case OpCode_CIDFontVersion:
+ case OpCode_CIDFontRevision:
+ case OpCode_CIDFontType:
+ case OpCode_UIDBase:
+ case OpCode_FontBBox:
+ case OpCode_XUID:
+ case OpCode_BaseFontBlend:
+ env.clear_args ();
+ break;
+
+ case OpCode_CIDCount:
+ dictval.cidCount = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+
+ case OpCode_ROS:
+ dictval.ros_supplement = env.argStack.pop_uint ();
+ dictval.nameSIDs[NameDictValues::ordering] = env.argStack.pop_uint ();
+ dictval.nameSIDs[NameDictValues::registry] = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+
+ case OpCode_Encoding:
+ dictval.EncodingOffset = env.argStack.pop_uint ();
+ env.clear_args ();
+ if (unlikely (dictval.EncodingOffset == 0)) return;
+ break;
+
+ case OpCode_charset:
+ dictval.CharsetOffset = env.argStack.pop_uint ();
+ env.clear_args ();
+ if (unlikely (dictval.CharsetOffset == 0)) return;
+ break;
+
+ case OpCode_FDSelect:
+ dictval.FDSelectOffset = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+
+ case OpCode_Private:
+ dictval.privateDictInfo.offset = env.argStack.pop_uint ();
+ dictval.privateDictInfo.size = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+
+ default:
+ env.last_offset = env.substr.offset;
+ TopDictOpSet<CFF1TopDictVal>::process_op (op, env, dictval);
+ /* Record this operand below if stack is empty, otherwise done */
+ if (!env.argStack.is_empty ()) return;
+ break;
+ }
+
+ if (unlikely (env.in_error ())) return;
+
+ dictval.add_op (op, env.substr, val);
+ }
+};
+
+struct CFF1FontDictValues : DictValues<OpStr>
+{
+ void init ()
+ {
+ DictValues<OpStr>::init ();
+ privateDictInfo.init ();
+ fontName = CFF_UNDEF_SID;
+ }
+ void fini () { DictValues<OpStr>::fini (); }
+
+ TableInfo privateDictInfo;
+ unsigned int fontName;
+};
+
+struct CFF1FontDictOpSet : DictOpSet
+{
+ static void process_op (OpCode op, NumInterpEnv& env, CFF1FontDictValues& dictval)
+ {
+ switch (op) {
+ case OpCode_FontName:
+ dictval.fontName = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+ case OpCode_FontMatrix:
+ case OpCode_PaintType:
+ env.clear_args ();
+ break;
+ case OpCode_Private:
+ dictval.privateDictInfo.offset = env.argStack.pop_uint ();
+ dictval.privateDictInfo.size = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+
+ default:
+ DictOpSet::process_op (op, env);
+ if (!env.argStack.is_empty ()) return;
+ break;
+ }
+
+ if (unlikely (env.in_error ())) return;
+
+ dictval.add_op (op, env.substr);
+ }
+};
+
+template <typename VAL>
+struct CFF1PrivateDictValues_Base : DictValues<VAL>
+{
+ void init ()
+ {
+ DictValues<VAL>::init ();
+ subrsOffset = 0;
+ localSubrs = &Null(CFF1Subrs);
+ }
+ void fini () { DictValues<VAL>::fini (); }
+
+ unsigned int calculate_serialized_size () const
+ {
+ unsigned int size = 0;
+ for (unsigned int i = 0; i < DictValues<VAL>::get_count; i++)
+ if (DictValues<VAL>::get_value (i).op == OpCode_Subrs)
+ size += OpCode_Size (OpCode_shortint) + 2 + OpCode_Size (OpCode_Subrs);
+ else
+ size += DictValues<VAL>::get_value (i).str.len;
+ return size;
+ }
+
+ unsigned int subrsOffset;
+ const CFF1Subrs *localSubrs;
+};
+
+typedef CFF1PrivateDictValues_Base<OpStr> CFF1PrivateDictValues_Subset;
+typedef CFF1PrivateDictValues_Base<NumDictVal> CFF1PrivateDictValues;
+
+struct CFF1PrivateDictOpSet : DictOpSet
+{
+ static void process_op (OpCode op, NumInterpEnv& env, CFF1PrivateDictValues& dictval)
+ {
+ NumDictVal val;
+ val.init ();
+
+ switch (op) {
+ case OpCode_BlueValues:
+ case OpCode_OtherBlues:
+ case OpCode_FamilyBlues:
+ case OpCode_FamilyOtherBlues:
+ case OpCode_StemSnapH:
+ case OpCode_StemSnapV:
+ env.clear_args ();
+ break;
+ case OpCode_StdHW:
+ case OpCode_StdVW:
+ case OpCode_BlueScale:
+ case OpCode_BlueShift:
+ case OpCode_BlueFuzz:
+ case OpCode_ForceBold:
+ case OpCode_LanguageGroup:
+ case OpCode_ExpansionFactor:
+ case OpCode_initialRandomSeed:
+ case OpCode_defaultWidthX:
+ case OpCode_nominalWidthX:
+ val.single_val = env.argStack.pop_num ();
+ env.clear_args ();
+ break;
+ case OpCode_Subrs:
+ dictval.subrsOffset = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+
+ default:
+ DictOpSet::process_op (op, env);
+ if (!env.argStack.is_empty ()) return;
+ break;
+ }
+
+ if (unlikely (env.in_error ())) return;
+
+ dictval.add_op (op, env.substr, val);
+ }
+};
+
+struct CFF1PrivateDictOpSet_Subset : DictOpSet
+{
+ static void process_op (OpCode op, NumInterpEnv& env, CFF1PrivateDictValues_Subset& dictval)
+ {
+ switch (op) {
+ case OpCode_BlueValues:
+ case OpCode_OtherBlues:
+ case OpCode_FamilyBlues:
+ case OpCode_FamilyOtherBlues:
+ case OpCode_StemSnapH:
+ case OpCode_StemSnapV:
+ case OpCode_StdHW:
+ case OpCode_StdVW:
+ case OpCode_BlueScale:
+ case OpCode_BlueShift:
+ case OpCode_BlueFuzz:
+ case OpCode_ForceBold:
+ case OpCode_LanguageGroup:
+ case OpCode_ExpansionFactor:
+ case OpCode_initialRandomSeed:
+ case OpCode_defaultWidthX:
+ case OpCode_nominalWidthX:
+ env.clear_args ();
+ break;
+
+ case OpCode_Subrs:
+ dictval.subrsOffset = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+
+ default:
+ DictOpSet::process_op (op, env);
+ if (!env.argStack.is_empty ()) return;
+ break;
+ }
+
+ if (unlikely (env.in_error ())) return;
+
+ dictval.add_op (op, env.substr);
+ }
+};
+
+typedef DictInterpreter<CFF1TopDictOpSet, CFF1TopDictValues, CFF1TopDictInterpEnv> CFF1TopDict_Interpreter;
+typedef DictInterpreter<CFF1FontDictOpSet, CFF1FontDictValues> CFF1FontDict_Interpreter;
+typedef DictInterpreter<CFF1PrivateDictOpSet, CFF1PrivateDictValues> CFF1PrivateDict_Interpreter;
+
+typedef CFF1Index CFF1NameIndex;
+typedef CFF1IndexOf<TopDict> CFF1TopDictIndex;
+
+}; /* namespace CFF */
+
+namespace OT {
+
+using namespace CFF;
+
+struct cff1
+{
+ static const hb_tag_t tableTag = HB_OT_TAG_cff1;
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ likely (version.major == 1));
+ }
+
+ template <typename PRIVOPSET, typename PRIVDICTVAL>
+ struct accelerator_templ_t
+ {
+ void init (hb_face_t *face)
+ {
+ topDict.init ();
+ fontDicts.init ();
+ privateDicts.init ();
+
+ this->blob = sc.reference_table<cff1> (face);
+
+ /* setup for run-time santization */
+ sc.init (this->blob);
+ sc.start_processing ();
+
+ const OT::cff1 *cff = this->blob->template as<OT::cff1> ();
+
+ if (cff == &Null(OT::cff1))
+ { fini (); return; }
+
+ nameIndex = &cff->nameIndex (cff);
+ if ((nameIndex == &Null (CFF1NameIndex)) || !nameIndex->sanitize (&sc))
+ { fini (); return; }
+
+ topDictIndex = &StructAtOffset<CFF1TopDictIndex> (nameIndex, nameIndex->get_size ());
+ if ((topDictIndex == &Null (CFF1TopDictIndex)) || !topDictIndex->sanitize (&sc) || (topDictIndex->count == 0))
+ { fini (); return; }
+
+ { /* parse top dict */
+ const ByteStr topDictStr = (*topDictIndex)[0];
+ if (unlikely (!topDictStr.sanitize (&sc))) { fini (); return; }
+ CFF1TopDict_Interpreter top_interp;
+ top_interp.env.init (topDictStr);
+ topDict.init ();
+ if (unlikely (!top_interp.interpret (topDict))) { fini (); return; }
+ }
+
+ if (is_predef_charset ())
+ charset = &Null(Charset);
+ else
+ {
+ charset = &StructAtOffsetOrNull<Charset> (cff, topDict.CharsetOffset);
+ if (unlikely ((charset == &Null (Charset)) || !charset->sanitize (&sc))) { fini (); return; }
+ }
+
+ fdCount = 1;
+ if (is_CID ())
+ {
+ fdArray = &StructAtOffsetOrNull<CFF1FDArray> (cff, topDict.FDArrayOffset);
+ fdSelect = &StructAtOffsetOrNull<CFF1FDSelect> (cff, topDict.FDSelectOffset);
+ if (unlikely ((fdArray == &Null(CFF1FDArray)) || !fdArray->sanitize (&sc) ||
+ (fdSelect == &Null(CFF1FDSelect)) || !fdSelect->sanitize (&sc, fdArray->count)))
+ { fini (); return; }
+
+ fdCount = fdArray->count;
+ }
+ else
+ {
+ fdArray = &Null(CFF1FDArray);
+ fdSelect = &Null(CFF1FDSelect);
+ }
+
+ stringIndex = &StructAtOffset<CFF1StringIndex> (topDictIndex, topDictIndex->get_size ());
+ if ((stringIndex == &Null (CFF1StringIndex)) || !stringIndex->sanitize (&sc))
+ { fini (); return; }
+
+ globalSubrs = &StructAtOffset<CFF1Subrs> (stringIndex, stringIndex->get_size ());
+ if ((globalSubrs != &Null (CFF1Subrs)) && !globalSubrs->sanitize (&sc))
+ { fini (); return; }
+
+ charStrings = &StructAtOffsetOrNull<CFF1CharStrings> (cff, topDict.charStringsOffset);
+
+ if ((charStrings == &Null(CFF1CharStrings)) || unlikely (!charStrings->sanitize (&sc)))
+ { fini (); return; }
+
+ num_glyphs = charStrings->count;
+ if (num_glyphs != sc.get_num_glyphs ())
+ { fini (); return; }
+
+ privateDicts.resize (fdCount);
+ for (unsigned int i = 0; i < fdCount; i++)
+ privateDicts[i].init ();
+
+ // parse CID font dicts and gather private dicts
+ if (is_CID ())
+ {
+ for (unsigned int i = 0; i < fdCount; i++)
+ {
+ ByteStr fontDictStr = (*fdArray)[i];
+ if (unlikely (!fontDictStr.sanitize (&sc))) { fini (); return; }
+ CFF1FontDictValues *font;
+ CFF1FontDict_Interpreter font_interp;
+ font_interp.env.init (fontDictStr);
+ font = fontDicts.push ();
+ if (unlikely (font == &Crap(CFF1FontDictValues))) { fini (); return; }
+ font->init ();
+ if (unlikely (!font_interp.interpret (*font))) { fini (); return; }
+ PRIVDICTVAL *priv = &privateDicts[i];
+ const ByteStr privDictStr (StructAtOffset<UnsizedByteStr> (cff, font->privateDictInfo.offset), font->privateDictInfo.size);
+ if (unlikely (!privDictStr.sanitize (&sc))) { fini (); return; }
+ DictInterpreter<PRIVOPSET, PRIVDICTVAL> priv_interp;
+ priv_interp.env.init (privDictStr);
+ priv->init ();
+ if (unlikely (!priv_interp.interpret (*priv))) { fini (); return; }
+
+ priv->localSubrs = &StructAtOffsetOrNull<CFF1Subrs> (privDictStr.str, priv->subrsOffset);
+ if (priv->localSubrs != &Null(CFF1Subrs) &&
+ unlikely (!priv->localSubrs->sanitize (&sc)))
+ { fini (); return; }
+ }
+ }
+ else /* non-CID */
+ {
+ CFF1TopDictValues *font = &topDict;
+ PRIVDICTVAL *priv = &privateDicts[0];
+
+ const ByteStr privDictStr (StructAtOffset<UnsizedByteStr> (cff, font->privateDictInfo.offset), font->privateDictInfo.size);
+ if (unlikely (!privDictStr.sanitize (&sc))) { fini (); return; }
+ DictInterpreter<PRIVOPSET, PRIVDICTVAL> priv_interp;
+ priv_interp.env.init (privDictStr);
+ priv->init ();
+ if (unlikely (!priv_interp.interpret (*priv))) { fini (); return; }
+
+ priv->localSubrs = &StructAtOffsetOrNull<CFF1Subrs> (privDictStr.str, priv->subrsOffset);
+ if (priv->localSubrs != &Null(CFF1Subrs) &&
+ unlikely (!priv->localSubrs->sanitize (&sc)))
+ { fini (); return; }
+ }
+ }
+
+ void fini ()
+ {
+ sc.end_processing ();
+ topDict.fini ();
+ fontDicts.fini_deep ();
+ privateDicts.fini_deep ();
+ hb_blob_destroy (blob);
+ blob = nullptr;
+ }
+
+ bool is_valid () const { return blob != nullptr; }
+ bool is_CID () const { return topDict.is_CID (); }
+
+ bool is_predef_charset () const { return topDict.CharsetOffset <= ExpertSubsetCharset; }
+
+ unsigned int std_code_to_glyph (hb_codepoint_t code) const
+ {
+ hb_codepoint_t sid = lookup_standard_encoding_for_sid (code);
+ if (unlikely (sid == CFF_UNDEF_SID))
+ return 0;
+
+ if (charset != &Null(Charset))
+ return charset->get_glyph (sid, num_glyphs);
+ else if ((topDict.CharsetOffset == ISOAdobeCharset)
+ && (code <= 228 /*zcaron*/)) return sid;
+ return 0;
+ }
+
+ protected:
+ hb_blob_t *blob;
+ hb_sanitize_context_t sc;
+
+ public:
+ const Charset *charset;
+ const CFF1NameIndex *nameIndex;
+ const CFF1TopDictIndex *topDictIndex;
+ const CFF1StringIndex *stringIndex;
+ const CFF1Subrs *globalSubrs;
+ const CFF1CharStrings *charStrings;
+ const CFF1FDArray *fdArray;
+ const CFF1FDSelect *fdSelect;
+ unsigned int fdCount;
+
+ CFF1TopDictValues topDict;
+ hb_vector_t<CFF1FontDictValues> fontDicts;
+ hb_vector_t<PRIVDICTVAL> privateDicts;
+
+ unsigned int num_glyphs;
+ };
+
+ struct accelerator_t : accelerator_templ_t<CFF1PrivateDictOpSet, CFF1PrivateDictValues>
+ {
+ HB_INTERNAL bool get_extents (hb_codepoint_t glyph, hb_glyph_extents_t *extents) const;
+ HB_INTERNAL bool get_seac_components (hb_codepoint_t glyph, hb_codepoint_t *base, hb_codepoint_t *accent) const;
+ };
+
+ struct accelerator_subset_t : accelerator_templ_t<CFF1PrivateDictOpSet_Subset, CFF1PrivateDictValues_Subset>
+ {
+ void init (hb_face_t *face)
+ {
+ SUPER::init (face);
+ if (blob == nullptr) return;
+
+ const OT::cff1 *cff = this->blob->as<OT::cff1> ();
+ encoding = &Null(Encoding);
+ if (is_CID ())
+ {
+ if (unlikely (charset == &Null(Charset))) { fini (); return; }
+ }
+ else
+ {
+ if (!is_predef_encoding ())
+ {
+ encoding = &StructAtOffsetOrNull<Encoding> (cff, topDict.EncodingOffset);
+ if (unlikely ((encoding == &Null (Encoding)) || !encoding->sanitize (&sc))) { fini (); return; }
+ }
+ }
+ }
+
+ bool is_predef_encoding () const { return topDict.EncodingOffset <= ExpertEncoding; }
+
+ hb_codepoint_t glyph_to_code (hb_codepoint_t glyph) const
+ {
+ if (encoding != &Null(Encoding))
+ return encoding->get_code (glyph);
+ else
+ {
+ hb_codepoint_t sid = glyph_to_sid (glyph);
+ if (sid == 0) return 0;
+ hb_codepoint_t code = 0;
+ switch (topDict.EncodingOffset)
+ {
+ case StandardEncoding:
+ code = lookup_standard_encoding_for_code (sid);
+ break;
+ case ExpertEncoding:
+ code = lookup_expert_encoding_for_code (sid);
+ break;
+ default:
+ break;
+ }
+ return code;
+ }
+ }
+
+ hb_codepoint_t glyph_to_sid (hb_codepoint_t glyph) const
+ {
+ if (charset != &Null(Charset))
+ return charset->get_sid (glyph);
+ else
+ {
+ hb_codepoint_t sid = 0;
+ switch (topDict.CharsetOffset)
+ {
+ case ISOAdobeCharset:
+ if (glyph <= 228 /*zcaron*/) sid = glyph;
+ break;
+ case ExpertCharset:
+ sid = lookup_expert_charset_for_sid (glyph);
+ break;
+ case ExpertSubsetCharset:
+ sid = lookup_expert_subset_charset_for_sid (glyph);
+ break;
+ default:
+ break;
+ }
+ return sid;
+ }
+ }
+
+ const Encoding *encoding;
+
+ private:
+ typedef accelerator_templ_t<CFF1PrivateDictOpSet_Subset, CFF1PrivateDictValues_Subset> SUPER;
+ };
+
+ bool subset (hb_subset_plan_t *plan) const
+ {
+ hb_blob_t *cff_prime = nullptr;
+
+ bool success = true;
+ if (hb_subset_cff1 (plan, &cff_prime)) {
+ success = success && plan->add_table (HB_OT_TAG_cff1, cff_prime);
+ hb_blob_t *head_blob = hb_sanitize_context_t().reference_table<head> (plan->source);
+ success = success && head_blob && plan->add_table (HB_OT_TAG_head, head_blob);
+ hb_blob_destroy (head_blob);
+ } else {
+ success = false;
+ }
+ hb_blob_destroy (cff_prime);
+
+ return success;
+ }
+
+ protected:
+ HB_INTERNAL static hb_codepoint_t lookup_standard_encoding_for_code (hb_codepoint_t sid);
+ HB_INTERNAL static hb_codepoint_t lookup_expert_encoding_for_code (hb_codepoint_t sid);
+ HB_INTERNAL static hb_codepoint_t lookup_expert_charset_for_sid (hb_codepoint_t glyph);
+ HB_INTERNAL static hb_codepoint_t lookup_expert_subset_charset_for_sid (hb_codepoint_t glyph);
+ HB_INTERNAL static hb_codepoint_t lookup_standard_encoding_for_sid (hb_codepoint_t code);
+
+ public:
+ FixedVersion<HBUINT8> version; /* Version of CFF table. set to 0x0100u */
+ OffsetTo<CFF1NameIndex, HBUINT8> nameIndex; /* headerSize = Offset to Name INDEX. */
+ HBUINT8 offSize; /* offset size (unused?) */
+
+ public:
+ DEFINE_SIZE_STATIC (4);
+};
+
+struct cff1_accelerator_t : cff1::accelerator_t {};
+} /* namespace OT */
+
+#endif /* HB_OT_CFF1_TABLE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff2-table.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff2-table.cc
new file mode 100644
index 00000000000..7188a3bfe86
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff2-table.cc
@@ -0,0 +1,136 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+
+#include "hb-ot-cff2-table.hh"
+#include "hb-cff2-interp-cs.hh"
+
+using namespace CFF;
+
+struct ExtentsParam
+{
+ void init ()
+ {
+ path_open = false;
+ min_x.set_int (0x7FFFFFFF);
+ min_y.set_int (0x7FFFFFFF);
+ max_x.set_int (-0x80000000);
+ max_y.set_int (-0x80000000);
+ }
+
+ void start_path () { path_open = true; }
+ void end_path () { path_open = false; }
+ bool is_path_open () const { return path_open; }
+
+ void update_bounds (const Point &pt)
+ {
+ if (pt.x < min_x) min_x = pt.x;
+ if (pt.x > max_x) max_x = pt.x;
+ if (pt.y < min_y) min_y = pt.y;
+ if (pt.y > max_y) max_y = pt.y;
+ }
+
+ bool path_open;
+ Number min_x;
+ Number min_y;
+ Number max_x;
+ Number max_y;
+};
+
+struct CFF2PathProcs_Extents : PathProcs<CFF2PathProcs_Extents, CFF2CSInterpEnv, ExtentsParam>
+{
+ static void moveto (CFF2CSInterpEnv &env, ExtentsParam& param, const Point &pt)
+ {
+ param.end_path ();
+ env.moveto (pt);
+ }
+
+ static void line (CFF2CSInterpEnv &env, ExtentsParam& param, const Point &pt1)
+ {
+ if (!param.is_path_open ())
+ {
+ param.start_path ();
+ param.update_bounds (env.get_pt ());
+ }
+ env.moveto (pt1);
+ param.update_bounds (env.get_pt ());
+ }
+
+ static void curve (CFF2CSInterpEnv &env, ExtentsParam& param, const Point &pt1, const Point &pt2, const Point &pt3)
+ {
+ if (!param.is_path_open ())
+ {
+ param.start_path ();
+ param.update_bounds (env.get_pt ());
+ }
+ /* include control points */
+ param.update_bounds (pt1);
+ param.update_bounds (pt2);
+ env.moveto (pt3);
+ param.update_bounds (env.get_pt ());
+ }
+};
+
+struct CFF2CSOpSet_Extents : CFF2CSOpSet<CFF2CSOpSet_Extents, ExtentsParam, CFF2PathProcs_Extents> {};
+
+bool OT::cff2::accelerator_t::get_extents (hb_font_t *font,
+ hb_codepoint_t glyph,
+ hb_glyph_extents_t *extents) const
+{
+ if (unlikely (!is_valid () || (glyph >= num_glyphs))) return false;
+
+ unsigned int num_coords;
+ const int *coords = hb_font_get_var_coords_normalized (font, &num_coords);
+ unsigned int fd = fdSelect->get_fd (glyph);
+ CFF2CSInterpreter<CFF2CSOpSet_Extents, ExtentsParam> interp;
+ const ByteStr str = (*charStrings)[glyph];
+ interp.env.init (str, *this, fd, coords, num_coords);
+ ExtentsParam param;
+ param.init ();
+ if (unlikely (!interp.interpret (param))) return false;
+
+ if (param.min_x >= param.max_x)
+ {
+ extents->width = 0;
+ extents->x_bearing = 0;
+ }
+ else
+ {
+ extents->x_bearing = (int32_t)param.min_x.floor ();
+ extents->width = (int32_t)param.max_x.ceil () - extents->x_bearing;
+ }
+ if (param.min_y >= param.max_y)
+ {
+ extents->height = 0;
+ extents->y_bearing = 0;
+ }
+ else
+ {
+ extents->y_bearing = (int32_t)param.max_y.ceil ();
+ extents->height = (int32_t)param.min_y.floor () - extents->y_bearing;
+ }
+
+ return true;
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff2-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff2-table.hh
new file mode 100644
index 00000000000..25c41ef8cc1
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cff2-table.hh
@@ -0,0 +1,565 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+
+#ifndef HB_OT_CFF2_TABLE_HH
+#define HB_OT_CFF2_TABLE_HH
+
+#include "hb-ot-head-table.hh"
+#include "hb-ot-cff-common.hh"
+#include "hb-subset-cff2.hh"
+
+namespace CFF {
+
+/*
+ * CFF2 -- Compact Font Format (CFF) Version 2
+ * https://docs.microsoft.com/en-us/typography/opentype/spec/cff2
+ */
+#define HB_OT_TAG_cff2 HB_TAG('C','F','F','2')
+
+typedef CFFIndex<HBUINT32> CFF2Index;
+template <typename Type> struct CFF2IndexOf : CFFIndexOf<HBUINT32, Type> {};
+
+typedef CFF2Index CFF2CharStrings;
+typedef FDArray<HBUINT32> CFF2FDArray;
+typedef Subrs<HBUINT32> CFF2Subrs;
+
+typedef FDSelect3_4<HBUINT32, HBUINT16> FDSelect4;
+typedef FDSelect3_4_Range<HBUINT32, HBUINT16> FDSelect4_Range;
+
+struct CFF2FDSelect
+{
+ bool sanitize (hb_sanitize_context_t *c, unsigned int fdcount) const
+ {
+ TRACE_SANITIZE (this);
+
+ return_trace (likely (c->check_struct (this) && (format == 0 || format == 3 || format == 4) &&
+ (format == 0)?
+ u.format0.sanitize (c, fdcount):
+ ((format == 3)?
+ u.format3.sanitize (c, fdcount):
+ u.format4.sanitize (c, fdcount))));
+ }
+
+ bool serialize (hb_serialize_context_t *c, const CFF2FDSelect &src, unsigned int num_glyphs)
+ {
+ TRACE_SERIALIZE (this);
+ unsigned int size = src.get_size (num_glyphs);
+ CFF2FDSelect *dest = c->allocate_size<CFF2FDSelect> (size);
+ if (unlikely (dest == nullptr)) return_trace (false);
+ memcpy (dest, &src, size);
+ return_trace (true);
+ }
+
+ unsigned int calculate_serialized_size (unsigned int num_glyphs) const
+ { return get_size (num_glyphs); }
+
+ unsigned int get_size (unsigned int num_glyphs) const
+ {
+ unsigned int size = format.static_size;
+ if (format == 0)
+ size += u.format0.get_size (num_glyphs);
+ else if (format == 3)
+ size += u.format3.get_size ();
+ else
+ size += u.format4.get_size ();
+ return size;
+ }
+
+ hb_codepoint_t get_fd (hb_codepoint_t glyph) const
+ {
+ if (this == &Null(CFF2FDSelect))
+ return 0;
+ if (format == 0)
+ return u.format0.get_fd (glyph);
+ else if (format == 3)
+ return u.format3.get_fd (glyph);
+ else
+ return u.format4.get_fd (glyph);
+ }
+
+ HBUINT8 format;
+ union {
+ FDSelect0 format0;
+ FDSelect3 format3;
+ FDSelect4 format4;
+ } u;
+
+ DEFINE_SIZE_MIN (2);
+};
+
+struct CFF2VariationStore
+{
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (likely (c->check_struct (this)) && c->check_range (&varStore, size) && varStore.sanitize (c));
+ }
+
+ bool serialize (hb_serialize_context_t *c, const CFF2VariationStore *varStore)
+ {
+ TRACE_SERIALIZE (this);
+ unsigned int size_ = varStore->get_size ();
+ CFF2VariationStore *dest = c->allocate_size<CFF2VariationStore> (size_);
+ if (unlikely (dest == nullptr)) return_trace (false);
+ memcpy (dest, varStore, size_);
+ return_trace (true);
+ }
+
+ unsigned int get_size () const { return HBUINT16::static_size + size; }
+
+ HBUINT16 size;
+ VariationStore varStore;
+
+ DEFINE_SIZE_MIN (2 + VariationStore::min_size);
+};
+
+struct CFF2TopDictValues : TopDictValues<>
+{
+ void init ()
+ {
+ TopDictValues<>::init ();
+ vstoreOffset = 0;
+ FDSelectOffset = 0;
+ }
+ void fini () { TopDictValues<>::fini (); }
+
+ unsigned int calculate_serialized_size () const
+ {
+ unsigned int size = 0;
+ for (unsigned int i = 0; i < get_count (); i++)
+ {
+ OpCode op = get_value (i).op;
+ switch (op)
+ {
+ case OpCode_vstore:
+ case OpCode_FDSelect:
+ size += OpCode_Size (OpCode_longintdict) + 4 + OpCode_Size (op);
+ break;
+ default:
+ size += TopDictValues<>::calculate_serialized_op_size (get_value (i));
+ break;
+ }
+ }
+ return size;
+ }
+
+ unsigned int vstoreOffset;
+ unsigned int FDSelectOffset;
+};
+
+struct CFF2TopDictOpSet : TopDictOpSet<>
+{
+ static void process_op (OpCode op, NumInterpEnv& env, CFF2TopDictValues& dictval)
+ {
+ switch (op) {
+ case OpCode_FontMatrix:
+ {
+ DictVal val;
+ val.init ();
+ dictval.add_op (op, env.substr);
+ env.clear_args ();
+ }
+ break;
+
+ case OpCode_vstore:
+ dictval.vstoreOffset = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+ case OpCode_FDSelect:
+ dictval.FDSelectOffset = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+
+ default:
+ SUPER::process_op (op, env, dictval);
+ /* Record this operand below if stack is empty, otherwise done */
+ if (!env.argStack.is_empty ()) return;
+ }
+
+ if (unlikely (env.in_error ())) return;
+
+ dictval.add_op (op, env.substr);
+ }
+
+ typedef TopDictOpSet<> SUPER;
+};
+
+struct CFF2FontDictValues : DictValues<OpStr>
+{
+ void init ()
+ {
+ DictValues<OpStr>::init ();
+ privateDictInfo.init ();
+ }
+ void fini () { DictValues<OpStr>::fini (); }
+
+ TableInfo privateDictInfo;
+};
+
+struct CFF2FontDictOpSet : DictOpSet
+{
+ static void process_op (OpCode op, NumInterpEnv& env, CFF2FontDictValues& dictval)
+ {
+ switch (op) {
+ case OpCode_Private:
+ dictval.privateDictInfo.offset = env.argStack.pop_uint ();
+ dictval.privateDictInfo.size = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+
+ default:
+ SUPER::process_op (op, env);
+ if (!env.argStack.is_empty ())
+ return;
+ }
+
+ if (unlikely (env.in_error ())) return;
+
+ dictval.add_op (op, env.substr);
+ }
+
+ private:
+ typedef DictOpSet SUPER;
+};
+
+template <typename VAL>
+struct CFF2PrivateDictValues_Base : DictValues<VAL>
+{
+ void init ()
+ {
+ DictValues<VAL>::init ();
+ subrsOffset = 0;
+ localSubrs = &Null(CFF2Subrs);
+ ivs = 0;
+ }
+ void fini () { DictValues<VAL>::fini (); }
+
+ unsigned int calculate_serialized_size () const
+ {
+ unsigned int size = 0;
+ for (unsigned int i = 0; i < DictValues<VAL>::get_count; i++)
+ if (DictValues<VAL>::get_value (i).op == OpCode_Subrs)
+ size += OpCode_Size (OpCode_shortint) + 2 + OpCode_Size (OpCode_Subrs);
+ else
+ size += DictValues<VAL>::get_value (i).str.len;
+ return size;
+ }
+
+ unsigned int subrsOffset;
+ const CFF2Subrs *localSubrs;
+ unsigned int ivs;
+};
+
+typedef CFF2PrivateDictValues_Base<OpStr> CFF2PrivateDictValues_Subset;
+typedef CFF2PrivateDictValues_Base<NumDictVal> CFF2PrivateDictValues;
+
+struct CFF2PrivDictInterpEnv : NumInterpEnv
+{
+ void init (const ByteStr &str)
+ {
+ NumInterpEnv::init (str);
+ ivs = 0;
+ seen_vsindex = false;
+ }
+
+ void process_vsindex ()
+ {
+ if (likely (!seen_vsindex))
+ {
+ set_ivs (argStack.pop_uint ());
+ }
+ seen_vsindex = true;
+ }
+
+ unsigned int get_ivs () const { return ivs; }
+ void set_ivs (unsigned int ivs_) { ivs = ivs_; }
+
+ protected:
+ unsigned int ivs;
+ bool seen_vsindex;
+};
+
+struct CFF2PrivateDictOpSet : DictOpSet
+{
+ static void process_op (OpCode op, CFF2PrivDictInterpEnv& env, CFF2PrivateDictValues& dictval)
+ {
+ NumDictVal val;
+ val.init ();
+
+ switch (op) {
+ case OpCode_StdHW:
+ case OpCode_StdVW:
+ case OpCode_BlueScale:
+ case OpCode_BlueShift:
+ case OpCode_BlueFuzz:
+ case OpCode_ExpansionFactor:
+ case OpCode_LanguageGroup:
+ val.single_val = env.argStack.pop_num ();
+ env.clear_args ();
+ break;
+ case OpCode_BlueValues:
+ case OpCode_OtherBlues:
+ case OpCode_FamilyBlues:
+ case OpCode_FamilyOtherBlues:
+ case OpCode_StemSnapH:
+ case OpCode_StemSnapV:
+ env.clear_args ();
+ break;
+ case OpCode_Subrs:
+ dictval.subrsOffset = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+ case OpCode_vsindexdict:
+ env.process_vsindex ();
+ dictval.ivs = env.get_ivs ();
+ env.clear_args ();
+ break;
+ case OpCode_blenddict:
+ break;
+
+ default:
+ DictOpSet::process_op (op, env);
+ if (!env.argStack.is_empty ()) return;
+ break;
+ }
+
+ if (unlikely (env.in_error ())) return;
+
+ dictval.add_op (op, env.substr, val);
+ }
+};
+
+struct CFF2PrivateDictOpSet_Subset : DictOpSet
+{
+ static void process_op (OpCode op, CFF2PrivDictInterpEnv& env, CFF2PrivateDictValues_Subset& dictval)
+ {
+ switch (op) {
+ case OpCode_BlueValues:
+ case OpCode_OtherBlues:
+ case OpCode_FamilyBlues:
+ case OpCode_FamilyOtherBlues:
+ case OpCode_StdHW:
+ case OpCode_StdVW:
+ case OpCode_BlueScale:
+ case OpCode_BlueShift:
+ case OpCode_BlueFuzz:
+ case OpCode_StemSnapH:
+ case OpCode_StemSnapV:
+ case OpCode_LanguageGroup:
+ case OpCode_ExpansionFactor:
+ env.clear_args ();
+ break;
+
+ case OpCode_blenddict:
+ env.clear_args ();
+ return;
+
+ case OpCode_Subrs:
+ dictval.subrsOffset = env.argStack.pop_uint ();
+ env.clear_args ();
+ break;
+
+ default:
+ SUPER::process_op (op, env);
+ if (!env.argStack.is_empty ()) return;
+ break;
+ }
+
+ if (unlikely (env.in_error ())) return;
+
+ dictval.add_op (op, env.substr);
+ }
+
+ private:
+ typedef DictOpSet SUPER;
+};
+
+typedef DictInterpreter<CFF2TopDictOpSet, CFF2TopDictValues> CFF2TopDict_Interpreter;
+typedef DictInterpreter<CFF2FontDictOpSet, CFF2FontDictValues> CFF2FontDict_Interpreter;
+
+}; /* namespace CFF */
+
+namespace OT {
+
+using namespace CFF;
+
+struct cff2
+{
+ static const hb_tag_t tableTag = HB_OT_TAG_cff2;
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ likely (version.major == 2));
+ }
+
+ template <typename PRIVOPSET, typename PRIVDICTVAL>
+ struct accelerator_templ_t
+ {
+ void init (hb_face_t *face)
+ {
+ topDict.init ();
+ fontDicts.init ();
+ privateDicts.init ();
+
+ this->blob = sc.reference_table<cff2> (face);
+
+ /* setup for run-time santization */
+ sc.init (this->blob);
+ sc.start_processing ();
+
+ const OT::cff2 *cff2 = this->blob->template as<OT::cff2> ();
+
+ if (cff2 == &Null(OT::cff2))
+ { fini (); return; }
+
+ { /* parse top dict */
+ ByteStr topDictStr (cff2 + cff2->topDict, cff2->topDictSize);
+ if (unlikely (!topDictStr.sanitize (&sc))) { fini (); return; }
+ CFF2TopDict_Interpreter top_interp;
+ top_interp.env.init (topDictStr);
+ topDict.init ();
+ if (unlikely (!top_interp.interpret (topDict))) { fini (); return; }
+ }
+
+ globalSubrs = &StructAtOffset<CFF2Subrs> (cff2, cff2->topDict + cff2->topDictSize);
+ varStore = &StructAtOffsetOrNull<CFF2VariationStore> (cff2, topDict.vstoreOffset);
+ charStrings = &StructAtOffsetOrNull<CFF2CharStrings> (cff2, topDict.charStringsOffset);
+ fdArray = &StructAtOffsetOrNull<CFF2FDArray> (cff2, topDict.FDArrayOffset);
+ fdSelect = &StructAtOffsetOrNull<CFF2FDSelect> (cff2, topDict.FDSelectOffset);
+
+ if (((varStore != &Null(CFF2VariationStore)) && unlikely (!varStore->sanitize (&sc))) ||
+ (charStrings == &Null(CFF2CharStrings)) || unlikely (!charStrings->sanitize (&sc)) ||
+ (globalSubrs == &Null(CFF2Subrs)) || unlikely (!globalSubrs->sanitize (&sc)) ||
+ (fdArray == &Null(CFF2FDArray)) || unlikely (!fdArray->sanitize (&sc)) ||
+ (((fdSelect != &Null(CFF2FDSelect)) && unlikely (!fdSelect->sanitize (&sc, fdArray->count)))))
+ { fini (); return; }
+
+ num_glyphs = charStrings->count;
+ if (num_glyphs != sc.get_num_glyphs ())
+ { fini (); return; }
+
+ fdCount = fdArray->count;
+ privateDicts.resize (fdCount);
+
+ /* parse font dicts and gather private dicts */
+ for (unsigned int i = 0; i < fdCount; i++)
+ {
+ const ByteStr fontDictStr = (*fdArray)[i];
+ if (unlikely (!fontDictStr.sanitize (&sc))) { fini (); return; }
+ CFF2FontDictValues *font;
+ CFF2FontDict_Interpreter font_interp;
+ font_interp.env.init (fontDictStr);
+ font = fontDicts.push ();
+ if (unlikely (font == &Crap(CFF2FontDictValues))) { fini (); return; }
+ font->init ();
+ if (unlikely (!font_interp.interpret (*font))) { fini (); return; }
+
+ const ByteStr privDictStr (StructAtOffsetOrNull<UnsizedByteStr> (cff2, font->privateDictInfo.offset), font->privateDictInfo.size);
+ if (unlikely (!privDictStr.sanitize (&sc))) { fini (); return; }
+ DictInterpreter<PRIVOPSET, PRIVDICTVAL, CFF2PrivDictInterpEnv> priv_interp;
+ priv_interp.env.init(privDictStr);
+ privateDicts[i].init ();
+ if (unlikely (!priv_interp.interpret (privateDicts[i]))) { fini (); return; }
+
+ privateDicts[i].localSubrs = &StructAtOffsetOrNull<CFF2Subrs> (privDictStr.str, privateDicts[i].subrsOffset);
+ if (privateDicts[i].localSubrs != &Null(CFF2Subrs) &&
+ unlikely (!privateDicts[i].localSubrs->sanitize (&sc)))
+ { fini (); return; }
+ }
+ }
+
+ void fini ()
+ {
+ sc.end_processing ();
+ fontDicts.fini_deep ();
+ privateDicts.fini_deep ();
+ hb_blob_destroy (blob);
+ blob = nullptr;
+ }
+
+ bool is_valid () const { return blob != nullptr; }
+
+ protected:
+ hb_blob_t *blob;
+ hb_sanitize_context_t sc;
+
+ public:
+ CFF2TopDictValues topDict;
+ const CFF2Subrs *globalSubrs;
+ const CFF2VariationStore *varStore;
+ const CFF2CharStrings *charStrings;
+ const CFF2FDArray *fdArray;
+ const CFF2FDSelect *fdSelect;
+ unsigned int fdCount;
+
+ hb_vector_t<CFF2FontDictValues> fontDicts;
+ hb_vector_t<PRIVDICTVAL> privateDicts;
+
+ unsigned int num_glyphs;
+ };
+
+ struct accelerator_t : accelerator_templ_t<CFF2PrivateDictOpSet, CFF2PrivateDictValues>
+ {
+ HB_INTERNAL bool get_extents (hb_font_t *font,
+ hb_codepoint_t glyph,
+ hb_glyph_extents_t *extents) const;
+ };
+
+ typedef accelerator_templ_t<CFF2PrivateDictOpSet_Subset, CFF2PrivateDictValues_Subset> accelerator_subset_t;
+
+ bool subset (hb_subset_plan_t *plan) const
+ {
+ hb_blob_t *cff2_prime = nullptr;
+
+ bool success = true;
+ if (hb_subset_cff2 (plan, &cff2_prime)) {
+ success = success && plan->add_table (HB_OT_TAG_cff2, cff2_prime);
+ hb_blob_t *head_blob = hb_sanitize_context_t().reference_table<head> (plan->source);
+ success = success && head_blob && plan->add_table (HB_OT_TAG_head, head_blob);
+ hb_blob_destroy (head_blob);
+ } else {
+ success = false;
+ }
+ hb_blob_destroy (cff2_prime);
+
+ return success;
+ }
+
+ public:
+ FixedVersion<HBUINT8> version; /* Version of CFF2 table. set to 0x0200u */
+ OffsetTo<TopDict, HBUINT8, false> topDict; /* headerSize = Offset to Top DICT. */
+ HBUINT16 topDictSize; /* Top DICT size */
+
+ public:
+ DEFINE_SIZE_STATIC (5);
+};
+
+struct cff2_accelerator_t : cff2::accelerator_t {};
+} /* namespace OT */
+
+#endif /* HB_OT_CFF2_TABLE_HH */
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 cdc610be3ea..7567e52cf1e 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
@@ -41,7 +41,7 @@ namespace OT {
struct CmapSubtableFormat0
{
- inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+ bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
{
hb_codepoint_t gid = codepoint < 256 ? glyphIdArray[codepoint] : 0;
if (!gid)
@@ -49,14 +49,14 @@ struct CmapSubtableFormat0
*glyph = gid;
return true;
}
- inline void collect_unicodes (hb_set_t *out) const
+ void collect_unicodes (hb_set_t *out) const
{
for (unsigned int i = 0; i < 256; i++)
if (glyphIdArray[i])
out->add (i);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -154,7 +154,7 @@ struct CmapSubtableFormat4
return_trace (true);
}
- static inline size_t get_sub_table_size (const hb_vector_t<segment_plan> &segments)
+ static size_t get_sub_table_size (const hb_vector_t<segment_plan> &segments)
{
size_t segment_size = 0;
for (unsigned int i = 0; i < segments.len; i++)
@@ -176,8 +176,8 @@ struct CmapSubtableFormat4
+ segment_size;
}
- static inline bool create_sub_table_plan (const hb_subset_plan_t *plan,
- hb_vector_t<segment_plan> *segments)
+ static bool create_sub_table_plan (const hb_subset_plan_t *plan,
+ hb_vector_t<segment_plan> *segments)
{
segment_plan *segment = nullptr;
hb_codepoint_t last_gid = 0;
@@ -226,11 +226,11 @@ struct CmapSubtableFormat4
struct accelerator_t
{
- inline accelerator_t (void) {}
- inline accelerator_t (const CmapSubtableFormat4 *subtable) { init (subtable); }
- inline ~accelerator_t (void) { fini (); }
+ accelerator_t () {}
+ accelerator_t (const CmapSubtableFormat4 *subtable) { init (subtable); }
+ ~accelerator_t () { fini (); }
- inline void init (const CmapSubtableFormat4 *subtable)
+ void init (const CmapSubtableFormat4 *subtable)
{
segCount = subtable->segCountX2 / 2;
endCount = subtable->values.arrayZ;
@@ -240,9 +240,9 @@ struct CmapSubtableFormat4
glyphIdArray = idRangeOffset + segCount;
glyphIdArrayLength = (subtable->length - 16 - 8 * segCount) / 2;
}
- inline void fini (void) {}
+ void fini () {}
- inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+ bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
{
/* Custom two-array bsearch. */
int min = 0, max = (int) this->segCount - 1;
@@ -286,11 +286,11 @@ struct CmapSubtableFormat4
*glyph = gid;
return true;
}
- static inline bool get_glyph_func (const void *obj, hb_codepoint_t codepoint, hb_codepoint_t *glyph)
+ static bool get_glyph_func (const void *obj, hb_codepoint_t codepoint, hb_codepoint_t *glyph)
{
return ((const accelerator_t *) obj)->get_glyph (codepoint, glyph);
}
- inline void collect_unicodes (hb_set_t *out) const
+ void collect_unicodes (hb_set_t *out) const
{
unsigned int count = this->segCount;
if (count && this->startCount[count - 1] == 0xFFFFu)
@@ -327,18 +327,18 @@ struct CmapSubtableFormat4
unsigned int glyphIdArrayLength;
};
- inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+ bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
{
accelerator_t accel (this);
return accel.get_glyph_func (&accel, codepoint, glyph);
}
- inline void collect_unicodes (hb_set_t *out) const
+ void collect_unicodes (hb_set_t *out) const
{
accelerator_t accel (this);
accel.collect_unicodes (out);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!c->check_struct (this)))
@@ -403,7 +403,7 @@ struct CmapSubtableLongGroup
return 0;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -422,7 +422,7 @@ DECLARE_NULL_NAMESPACE_BYTES (OT, CmapSubtableLongGroup);
template <typename UINT>
struct CmapSubtableTrimmed
{
- inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+ bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
{
/* Rely on our implicit array bound-checking. */
hb_codepoint_t gid = glyphIdArray[codepoint - startCharCode];
@@ -431,7 +431,7 @@ struct CmapSubtableTrimmed
*glyph = gid;
return true;
}
- inline void collect_unicodes (hb_set_t *out) const
+ void collect_unicodes (hb_set_t *out) const
{
hb_codepoint_t start = startCharCode;
unsigned int count = glyphIdArray.len;
@@ -440,7 +440,7 @@ struct CmapSubtableTrimmed
out->add (start + i);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && glyphIdArray.sanitize (c));
@@ -466,7 +466,7 @@ struct CmapSubtableLongSegmented
{
friend struct cmap;
- inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+ bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
{
hb_codepoint_t gid = T::group_get_glyph (groups.bsearch (codepoint), codepoint);
if (!gid)
@@ -475,7 +475,7 @@ struct CmapSubtableLongSegmented
return true;
}
- inline void collect_unicodes (hb_set_t *out) const
+ void collect_unicodes (hb_set_t *out) const
{
for (unsigned int i = 0; i < this->groups.len; i++) {
out->add_range (this->groups[i].startCharCode,
@@ -484,19 +484,18 @@ struct CmapSubtableLongSegmented
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && groups.sanitize (c));
}
- inline bool serialize (hb_serialize_context_t *c,
- const hb_vector_t<CmapSubtableLongGroup> &group_data)
+ bool serialize (hb_serialize_context_t *c,
+ const hb_vector_t<CmapSubtableLongGroup> &group_data)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (*this))) return_trace (false);
- Supplier<CmapSubtableLongGroup> supplier (group_data, group_data.len);
- if (unlikely (!groups.serialize (c, supplier, group_data.len))) return_trace (false);
+ if (unlikely (!groups.serialize (c, group_data.as_array ()))) return_trace (false);
return true;
}
@@ -513,8 +512,8 @@ struct CmapSubtableLongSegmented
struct CmapSubtableFormat12 : CmapSubtableLongSegmented<CmapSubtableFormat12>
{
- static inline hb_codepoint_t group_get_glyph (const CmapSubtableLongGroup &group,
- hb_codepoint_t u)
+ static hb_codepoint_t group_get_glyph (const CmapSubtableLongGroup &group,
+ hb_codepoint_t u)
{ return likely (group.startCharCode <= group.endCharCode) ?
group.glyphID + (u - group.startCharCode) : 0; }
@@ -531,13 +530,13 @@ struct CmapSubtableFormat12 : CmapSubtableLongSegmented<CmapSubtableFormat12>
return CmapSubtableLongSegmented<CmapSubtableFormat12>::serialize (c, groups);
}
- static inline size_t get_sub_table_size (const hb_vector_t<CmapSubtableLongGroup> &groups)
+ static size_t get_sub_table_size (const hb_vector_t<CmapSubtableLongGroup> &groups)
{
return 16 + 12 * groups.len;
}
- static inline bool create_sub_table_plan (const hb_subset_plan_t *plan,
- hb_vector_t<CmapSubtableLongGroup> *groups)
+ static bool create_sub_table_plan (const hb_subset_plan_t *plan,
+ hb_vector_t<CmapSubtableLongGroup> *groups)
{
CmapSubtableLongGroup *group = nullptr;
@@ -570,9 +569,9 @@ struct CmapSubtableFormat12 : CmapSubtableLongSegmented<CmapSubtableFormat12>
}
private:
- static inline bool _is_gid_consecutive (CmapSubtableLongGroup *group,
- hb_codepoint_t cp,
- hb_codepoint_t new_gid)
+ static bool _is_gid_consecutive (CmapSubtableLongGroup *group,
+ hb_codepoint_t cp,
+ hb_codepoint_t new_gid)
{
return (cp - 1 == group->endCharCode) &&
new_gid == group->glyphID + (cp - group->startCharCode);
@@ -582,8 +581,8 @@ struct CmapSubtableFormat12 : CmapSubtableLongSegmented<CmapSubtableFormat12>
struct CmapSubtableFormat13 : CmapSubtableLongSegmented<CmapSubtableFormat13>
{
- static inline hb_codepoint_t group_get_glyph (const CmapSubtableLongGroup &group,
- hb_codepoint_t u HB_UNUSED)
+ static hb_codepoint_t group_get_glyph (const CmapSubtableLongGroup &group,
+ hb_codepoint_t u HB_UNUSED)
{ return group.glyphID; }
};
@@ -596,14 +595,14 @@ typedef enum
struct UnicodeValueRange
{
- inline int cmp (const hb_codepoint_t &codepoint) const
+ int cmp (const hb_codepoint_t &codepoint) const
{
if (codepoint < startUnicodeValue) return -1;
if (codepoint > startUnicodeValue + additionalCount) return +1;
return 0;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -618,7 +617,7 @@ struct UnicodeValueRange
struct DefaultUVS : SortedArrayOf<UnicodeValueRange, HBUINT32>
{
- inline void collect_unicodes (hb_set_t *out) const
+ void collect_unicodes (hb_set_t *out) const
{
unsigned int count = len;
for (unsigned int i = 0; i < count; i++)
@@ -636,12 +635,12 @@ struct DefaultUVS : SortedArrayOf<UnicodeValueRange, HBUINT32>
struct UVSMapping
{
- inline int cmp (const hb_codepoint_t &codepoint) const
+ int cmp (const hb_codepoint_t &codepoint) const
{
return unicodeValue.cmp (codepoint);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -655,7 +654,7 @@ struct UVSMapping
struct NonDefaultUVS : SortedArrayOf<UVSMapping, HBUINT32>
{
- inline void collect_unicodes (hb_set_t *out) const
+ void collect_unicodes (hb_set_t *out) const
{
unsigned int count = len;
for (unsigned int i = 0; i < count; i++)
@@ -668,9 +667,9 @@ struct NonDefaultUVS : SortedArrayOf<UVSMapping, HBUINT32>
struct VariationSelectorRecord
{
- inline glyph_variant_t get_glyph (hb_codepoint_t codepoint,
- hb_codepoint_t *glyph,
- const void *base) const
+ glyph_variant_t get_glyph (hb_codepoint_t codepoint,
+ hb_codepoint_t *glyph,
+ const void *base) const
{
if ((base+defaultUVS).bfind (codepoint))
return GLYPH_VARIANT_USE_DEFAULT;
@@ -683,18 +682,18 @@ struct VariationSelectorRecord
return GLYPH_VARIANT_NOT_FOUND;
}
- inline void collect_unicodes (hb_set_t *out, const void *base) const
+ void collect_unicodes (hb_set_t *out, const void *base) const
{
(base+defaultUVS).collect_unicodes (out);
(base+nonDefaultUVS).collect_unicodes (out);
}
- inline int cmp (const hb_codepoint_t &variation_selector) const
+ int cmp (const hb_codepoint_t &variation_selector) const
{
return varSelector.cmp (variation_selector);
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -713,26 +712,26 @@ struct VariationSelectorRecord
struct CmapSubtableFormat14
{
- inline glyph_variant_t get_glyph_variant (hb_codepoint_t codepoint,
- hb_codepoint_t variation_selector,
- hb_codepoint_t *glyph) const
+ glyph_variant_t get_glyph_variant (hb_codepoint_t codepoint,
+ hb_codepoint_t variation_selector,
+ hb_codepoint_t *glyph) const
{
return record.bsearch (variation_selector).get_glyph (codepoint, glyph, this);
}
- inline void collect_variation_selectors (hb_set_t *out) const
+ void collect_variation_selectors (hb_set_t *out) const
{
unsigned int count = record.len;
for (unsigned int i = 0; i < count; i++)
out->add (record.arrayZ[i].varSelector);
}
- inline void collect_variation_unicodes (hb_codepoint_t variation_selector,
- hb_set_t *out) const
+ void collect_variation_unicodes (hb_codepoint_t variation_selector,
+ hb_set_t *out) const
{
record.bsearch (variation_selector).collect_unicodes (out, this);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -753,8 +752,8 @@ struct CmapSubtable
{
/* Note: We intentionally do NOT implement subtable formats 2 and 8. */
- inline bool get_glyph (hb_codepoint_t codepoint,
- hb_codepoint_t *glyph) const
+ bool get_glyph (hb_codepoint_t codepoint,
+ hb_codepoint_t *glyph) const
{
switch (u.format) {
case 0: return u.format0 .get_glyph (codepoint, glyph);
@@ -767,7 +766,7 @@ struct CmapSubtable
default: return false;
}
}
- inline void collect_unicodes (hb_set_t *out) const
+ void collect_unicodes (hb_set_t *out) const
{
switch (u.format) {
case 0: u.format0 .collect_unicodes (out); return;
@@ -781,7 +780,7 @@ struct CmapSubtable
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return_trace (false);
@@ -815,7 +814,7 @@ struct CmapSubtable
struct EncodingRecord
{
- inline int cmp (const EncodingRecord &other) const
+ int cmp (const EncodingRecord &other) const
{
int ret;
ret = platformID.cmp (other.platformID);
@@ -825,7 +824,7 @@ struct EncodingRecord
return 0;
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -842,11 +841,11 @@ struct EncodingRecord
struct cmap
{
- static const hb_tag_t tableTag = HB_OT_TAG_cmap;
+ enum { tableTag = HB_OT_TAG_cmap };
struct subset_plan
{
- inline size_t final_size () const
+ size_t final_size () const
{
return 4 // header
+ 8 * 3 // 3 EncodingRecord
@@ -858,8 +857,8 @@ struct cmap
hb_vector_t<CmapSubtableLongGroup> format12_groups;
};
- inline bool _create_plan (const hb_subset_plan_t *plan,
- subset_plan *cmap_plan) const
+ bool _create_plan (const hb_subset_plan_t *plan,
+ subset_plan *cmap_plan) const
{
if (unlikely (!CmapSubtableFormat4::create_sub_table_plan (plan, &cmap_plan->format4_segments)))
return false;
@@ -867,10 +866,10 @@ struct cmap
return CmapSubtableFormat12::create_sub_table_plan (plan, &cmap_plan->format12_groups);
}
- inline bool _subset (const hb_subset_plan_t *plan,
- const subset_plan &cmap_subset_plan,
- size_t dest_sz,
- void *dest) const
+ bool _subset (const hb_subset_plan_t *plan,
+ const subset_plan &cmap_subset_plan,
+ size_t dest_sz,
+ void *dest) const
{
hb_serialize_context_t c (dest, dest_sz);
@@ -928,7 +927,7 @@ struct cmap
return true;
}
- inline bool subset (hb_subset_plan_t *plan) const
+ bool subset (hb_subset_plan_t *plan) const
{
subset_plan cmap_subset_plan;
@@ -995,7 +994,7 @@ struct cmap
struct accelerator_t
{
- inline void init (hb_face_t *face)
+ void init (hb_face_t *face)
{
this->table = hb_sanitize_context_t ().reference_table<cmap> (face);
bool symbol;
@@ -1031,22 +1030,19 @@ struct cmap
}
}
- inline void fini (void)
- {
- this->table.destroy ();
- }
+ void fini () { this->table.destroy (); }
- inline bool get_nominal_glyph (hb_codepoint_t unicode,
+ bool get_nominal_glyph (hb_codepoint_t unicode,
hb_codepoint_t *glyph) const
{
if (unlikely (!this->get_glyph_funcZ)) return false;
return this->get_glyph_funcZ (this->get_glyph_data, unicode, glyph);
}
- inline unsigned int get_nominal_glyphs (unsigned int count,
- const hb_codepoint_t *first_unicode,
- unsigned int unicode_stride,
- hb_codepoint_t *first_glyph,
- unsigned int glyph_stride) const
+ unsigned int get_nominal_glyphs (unsigned int count,
+ const hb_codepoint_t *first_unicode,
+ unsigned int unicode_stride,
+ hb_codepoint_t *first_glyph,
+ unsigned int glyph_stride) const
{
if (unlikely (!this->get_glyph_funcZ)) return 0;
@@ -1064,9 +1060,9 @@ struct cmap
return done;
}
- inline bool get_variation_glyph (hb_codepoint_t unicode,
- hb_codepoint_t variation_selector,
- hb_codepoint_t *glyph) const
+ bool get_variation_glyph (hb_codepoint_t unicode,
+ hb_codepoint_t variation_selector,
+ hb_codepoint_t *glyph) const
{
switch (this->subtable_uvs->get_glyph_variant (unicode,
variation_selector,
@@ -1080,16 +1076,16 @@ struct cmap
return get_nominal_glyph (unicode, glyph);
}
- inline void collect_unicodes (hb_set_t *out) const
+ void collect_unicodes (hb_set_t *out) const
{
subtable->collect_unicodes (out);
}
- inline void collect_variation_selectors (hb_set_t *out) const
+ void collect_variation_selectors (hb_set_t *out) const
{
subtable_uvs->collect_variation_selectors (out);
}
- inline void collect_variation_unicodes (hb_codepoint_t variation_selector,
- hb_set_t *out) const
+ void collect_variation_unicodes (hb_codepoint_t variation_selector,
+ hb_set_t *out) const
{
subtable_uvs->collect_variation_unicodes (variation_selector, out);
}
@@ -1100,16 +1096,16 @@ struct cmap
hb_codepoint_t *glyph);
template <typename Type>
- static inline bool get_glyph_from (const void *obj,
- hb_codepoint_t codepoint,
- hb_codepoint_t *glyph)
+ static bool get_glyph_from (const void *obj,
+ hb_codepoint_t codepoint,
+ hb_codepoint_t *glyph)
{
const Type *typed_obj = (const Type *) obj;
return typed_obj->get_glyph (codepoint, glyph);
}
template <typename Type>
- static inline bool get_glyph_from_symbol (const void *obj,
+ static bool get_glyph_from_symbol (const void *obj,
hb_codepoint_t codepoint,
hb_codepoint_t *glyph)
{
@@ -1144,8 +1140,8 @@ struct cmap
protected:
- inline const CmapSubtable *find_subtable (unsigned int platform_id,
- unsigned int encoding_id) const
+ const CmapSubtable *find_subtable (unsigned int platform_id,
+ unsigned int encoding_id) const
{
EncodingRecord key;
key.platformID.set (platform_id);
@@ -1160,7 +1156,7 @@ struct cmap
public:
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cbdt-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cbdt-table.hh
index 47774fd8f0a..b1971a7615b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cbdt-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cbdt-table.hh
@@ -45,13 +45,13 @@ namespace OT {
struct SmallGlyphMetrics
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
}
- inline void get_extents (hb_glyph_extents_t *extents) const
+ void get_extents (hb_glyph_extents_t *extents) const
{
extents->x_bearing = bearingX;
extents->y_bearing = bearingY;
@@ -79,7 +79,7 @@ struct BigGlyphMetrics : SmallGlyphMetrics
struct SBitLineMetrics
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -108,7 +108,7 @@ struct SBitLineMetrics
struct IndexSubtableHeader
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -124,7 +124,7 @@ struct IndexSubtableHeader
template <typename OffsetType>
struct IndexSubtableFormat1Or3
{
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int glyph_count) const
+ bool sanitize (hb_sanitize_context_t *c, unsigned int glyph_count) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -155,7 +155,7 @@ struct IndexSubtableFormat3 : IndexSubtableFormat1Or3<HBUINT16> {};
struct IndexSubtable
{
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int glyph_count) const
+ bool sanitize (hb_sanitize_context_t *c, unsigned int glyph_count) const
{
TRACE_SANITIZE (this);
if (!u.header.sanitize (c)) return_trace (false);
@@ -166,7 +166,7 @@ struct IndexSubtable
}
}
- inline bool get_extents (hb_glyph_extents_t *extents HB_UNUSED) const
+ bool get_extents (hb_glyph_extents_t *extents HB_UNUSED) const
{
switch (u.header.indexFormat) {
case 2: case 5: /* TODO */
@@ -201,7 +201,7 @@ struct IndexSubtable
struct IndexSubtableRecord
{
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -209,8 +209,8 @@ struct IndexSubtableRecord
offsetToSubtable.sanitize (c, base, lastGlyphIndex - firstGlyphIndex + 1));
}
- inline bool get_extents (hb_glyph_extents_t *extents,
- const void *base) const
+ bool get_extents (hb_glyph_extents_t *extents,
+ const void *base) const
{
return (base+offsetToSubtable).get_extents (extents);
}
@@ -237,7 +237,7 @@ struct IndexSubtableArray
{
friend struct CBDT;
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int count) const
+ bool sanitize (hb_sanitize_context_t *c, unsigned int count) const
{
TRACE_SANITIZE (this);
return_trace (indexSubtablesZ.sanitize (c, count, this));
@@ -265,7 +265,7 @@ struct BitmapSizeTable
friend struct CBLC;
friend struct CBDT;
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -332,9 +332,9 @@ struct CBLC
{
friend struct CBDT;
- static const hb_tag_t tableTag = HB_OT_TAG_CBLC;
+ enum { tableTag = HB_OT_TAG_CBLC };
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -378,11 +378,11 @@ struct CBLC
struct CBDT
{
- static const hb_tag_t tableTag = HB_OT_TAG_CBDT;
+ enum { tableTag = HB_OT_TAG_CBDT };
struct accelerator_t
{
- inline void init (hb_face_t *face)
+ void init (hb_face_t *face)
{
cblc = hb_sanitize_context_t().reference_table<CBLC> (face);
cbdt = hb_sanitize_context_t().reference_table<CBDT> (face);
@@ -390,14 +390,14 @@ struct CBDT
upem = hb_face_get_upem (face);
}
- inline void fini (void)
+ void fini ()
{
this->cblc.destroy ();
this->cbdt.destroy ();
}
- inline bool get_extents (hb_font_t *font, hb_codepoint_t glyph,
- hb_glyph_extents_t *extents) const
+ bool get_extents (hb_font_t *font, hb_codepoint_t glyph,
+ hb_glyph_extents_t *extents) const
{
const void *base;
const BitmapSizeTable &strike = this->cblc->choose_strike (font);
@@ -452,7 +452,7 @@ struct CBDT
return true;
}
- inline hb_blob_t* reference_png (hb_font_t *font,
+ hb_blob_t* reference_png (hb_font_t *font,
hb_codepoint_t glyph) const
{
const void *base;
@@ -505,7 +505,7 @@ struct CBDT
return hb_blob_get_empty ();
}
- inline bool has_data () const { return cbdt.get_length (); }
+ bool has_data () const { return cbdt.get_length (); }
private:
hb_blob_ptr_t<CBLC> cblc;
@@ -514,7 +514,7 @@ struct CBDT
unsigned int upem;
};
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
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
index 84c34332556..3883604a535 100644
--- 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
@@ -39,7 +39,7 @@ namespace OT {
struct LayerRecord
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -63,10 +63,10 @@ struct LayerRecord
struct BaseGlyphRecord
{
- inline int cmp (hb_codepoint_t g) const
+ int cmp (hb_codepoint_t g) const
{ return g < glyphId ? -1 : g > glyphId ? 1 : 0; }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -87,14 +87,14 @@ struct BaseGlyphRecord
struct COLR
{
- static const hb_tag_t tableTag = HB_OT_TAG_COLR;
+ enum { tableTag = HB_OT_TAG_COLR };
- inline bool has_data (void) const { return numBaseGlyphs; }
+ bool has_data () const { return numBaseGlyphs; }
- inline unsigned int get_glyph_layers (hb_codepoint_t glyph,
- unsigned int start_offset,
- unsigned int *count, /* IN/OUT. May be NULL. */
- hb_ot_color_layer_t *layers /* OUT. May be NULL. */) const
+ unsigned int get_glyph_layers (hb_codepoint_t glyph,
+ unsigned int start_offset,
+ unsigned int *count, /* IN/OUT. May be NULL. */
+ hb_ot_color_layer_t *layers /* OUT. May be NULL. */) const
{
const BaseGlyphRecord &record = (this+baseGlyphsZ).bsearch (numBaseGlyphs, glyph);
@@ -114,7 +114,7 @@ struct COLR
return glyph_layers.len;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
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
index 332f0dd7452..bd57d8a3591 100644
--- 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
@@ -48,39 +48,36 @@ struct CPALV1Tail
friend struct CPAL;
private:
- inline hb_ot_color_palette_flags_t
- get_palette_flags (const void *base,
- unsigned int palette_index,
- unsigned int palette_count) const
+ hb_ot_color_palette_flags_t get_palette_flags (const void *base,
+ unsigned int palette_index,
+ unsigned int palette_count) const
{
if (!paletteFlagsZ) return HB_OT_COLOR_PALETTE_FLAG_DEFAULT;
return (hb_ot_color_palette_flags_t) (uint32_t)
(base+paletteFlagsZ).as_array (palette_count)[palette_index];
}
- inline hb_ot_name_id_t
- get_palette_name_id (const void *base,
- unsigned int palette_index,
- unsigned int palette_count) const
+ hb_ot_name_id_t get_palette_name_id (const void *base,
+ unsigned int palette_index,
+ unsigned int palette_count) const
{
if (!paletteLabelsZ) return HB_OT_NAME_ID_INVALID;
return (base+paletteLabelsZ).as_array (palette_count)[palette_index];
}
- inline hb_ot_name_id_t
- get_color_name_id (const void *base,
- unsigned int color_index,
- unsigned int color_count) const
+ hb_ot_name_id_t get_color_name_id (const void *base,
+ unsigned int color_index,
+ unsigned int color_count) const
{
if (!colorLabelsZ) return HB_OT_NAME_ID_INVALID;
return (base+colorLabelsZ).as_array (color_count)[color_index];
}
public:
- inline bool sanitize (hb_sanitize_context_t *c,
- const void *base,
- unsigned int palette_count,
- unsigned int color_count) const
+ bool sanitize (hb_sanitize_context_t *c,
+ const void *base,
+ unsigned int palette_count,
+ unsigned int color_count) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -110,29 +107,29 @@ typedef HBUINT32 BGRAColor;
struct CPAL
{
- static const hb_tag_t tableTag = HB_OT_TAG_CPAL;
+ enum { tableTag = HB_OT_TAG_CPAL };
- inline bool has_data (void) const { return numPalettes; }
+ bool has_data () const { return numPalettes; }
- inline unsigned int get_size (void) const
+ unsigned int get_size () const
{ return min_size + numPalettes * sizeof (colorRecordIndicesZ[0]); }
- inline unsigned int get_palette_count () const { return numPalettes; }
- inline unsigned int get_color_count () const { return numColors; }
+ unsigned int get_palette_count () const { return numPalettes; }
+ unsigned int get_color_count () const { return numColors; }
- inline hb_ot_color_palette_flags_t get_palette_flags (unsigned int palette_index) const
+ hb_ot_color_palette_flags_t get_palette_flags (unsigned int palette_index) const
{ return v1 ().get_palette_flags (this, palette_index, numPalettes); }
- inline hb_ot_name_id_t get_palette_name_id (unsigned int palette_index) const
+ hb_ot_name_id_t get_palette_name_id (unsigned int palette_index) const
{ return v1 ().get_palette_name_id (this, palette_index, numPalettes); }
- inline hb_ot_name_id_t get_color_name_id (unsigned int color_index) const
+ hb_ot_name_id_t get_color_name_id (unsigned int color_index) const
{ return v1 ().get_color_name_id (this, color_index, numColors); }
- inline unsigned int get_palette_colors (unsigned int palette_index,
- unsigned int start_offset,
- unsigned int *color_count, /* IN/OUT. May be NULL. */
- hb_color_t *colors /* OUT. May be NULL. */) const
+ unsigned int get_palette_colors (unsigned int palette_index,
+ unsigned int start_offset,
+ unsigned int *color_count, /* IN/OUT. May be NULL. */
+ hb_color_t *colors /* OUT. May be NULL. */) const
{
if (unlikely (palette_index >= numPalettes))
{
@@ -156,14 +153,14 @@ struct CPAL
}
private:
- inline const CPALV1Tail& v1 (void) const
+ const CPALV1Tail& v1 () const
{
if (version == 0) return Null(CPALV1Tail);
return StructAfter<CPALV1Tail> (*this);
}
public:
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-sbix-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-sbix-table.hh
index 08dee2a0c67..ed93d6526b5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-sbix-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-sbix-table.hh
@@ -62,20 +62,20 @@ struct SBIXGlyph
struct SBIXStrike
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
imageOffsetsZ.sanitize_shallow (c, c->get_num_glyphs () + 1));
}
- inline hb_blob_t *get_glyph_blob (unsigned int glyph_id,
- hb_blob_t *sbix_blob,
- hb_tag_t file_type,
- int *x_offset,
- int *y_offset,
- unsigned int num_glyphs,
- unsigned int *strike_ppem) const
+ hb_blob_t *get_glyph_blob (unsigned int glyph_id,
+ hb_blob_t *sbix_blob,
+ hb_tag_t file_type,
+ int *x_offset,
+ int *y_offset,
+ unsigned int num_glyphs,
+ unsigned int *strike_ppem) const
{
if (unlikely (!ppem)) return hb_blob_get_empty (); /* To get Null() object out of the way. */
@@ -130,43 +130,36 @@ struct SBIXStrike
struct sbix
{
- static const hb_tag_t tableTag = HB_OT_TAG_sbix;
+ enum { tableTag = HB_OT_TAG_sbix };
- inline bool has_data (void) const { return version; }
+ bool has_data () const { return version; }
- inline const SBIXStrike &get_strike (unsigned int i) const { return this+strikes[i]; }
+ const SBIXStrike &get_strike (unsigned int i) const { return this+strikes[i]; }
struct accelerator_t
{
- inline void init (hb_face_t *face)
+ void init (hb_face_t *face)
{
table = hb_sanitize_context_t().reference_table<sbix> (face);
num_glyphs = face->get_num_glyphs ();
}
+ void fini () { table.destroy (); }
- inline void fini (void)
- {
- table.destroy ();
- }
-
- inline bool has_data () const
- {
- return table->has_data ();
- }
+ bool has_data () const { return table->has_data (); }
- inline bool get_extents (hb_font_t *font,
- hb_codepoint_t glyph,
- hb_glyph_extents_t *extents) const
+ bool get_extents (hb_font_t *font,
+ hb_codepoint_t glyph,
+ hb_glyph_extents_t *extents) const
{
/* We only support PNG right now, and following function checks type. */
return get_png_extents (font, glyph, extents);
}
- inline hb_blob_t *reference_png (hb_font_t *font,
- hb_codepoint_t glyph_id,
- int *x_offset,
- int *y_offset,
- unsigned int *available_ppem) const
+ hb_blob_t *reference_png (hb_font_t *font,
+ hb_codepoint_t glyph_id,
+ int *x_offset,
+ int *y_offset,
+ unsigned int *available_ppem) const
{
return choose_strike (font).get_glyph_blob (glyph_id, table.get_blob (),
HB_TAG ('p','n','g',' '),
@@ -176,7 +169,7 @@ struct sbix
private:
- inline const SBIXStrike &choose_strike (hb_font_t *font) const
+ const SBIXStrike &choose_strike (hb_font_t *font) const
{
unsigned count = table->strikes.len;
if (unlikely (!count))
@@ -226,9 +219,9 @@ struct sbix
DEFINE_SIZE_STATIC (29);
};
- inline bool get_png_extents (hb_font_t *font,
- hb_codepoint_t glyph,
- hb_glyph_extents_t *extents) const
+ bool get_png_extents (hb_font_t *font,
+ hb_codepoint_t glyph,
+ hb_glyph_extents_t *extents) const
{
/* Following code is safe to call even without data.
* But faster to short-circuit. */
@@ -267,7 +260,7 @@ struct sbix
unsigned int num_glyphs;
};
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-svg-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-svg-table.hh
index ad3551035c8..554453f7594 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-svg-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-svg-table.hh
@@ -40,17 +40,17 @@ namespace OT {
struct SVGDocumentIndexEntry
{
- inline int cmp (hb_codepoint_t g) const
+ int cmp (hb_codepoint_t g) const
{ return g < startGlyphID ? -1 : g > endGlyphID ? 1 : 0; }
- inline hb_blob_t *reference_blob (hb_blob_t *svg_blob, unsigned int index_offset) const
+ hb_blob_t *reference_blob (hb_blob_t *svg_blob, unsigned int index_offset) const
{
return hb_blob_create_sub_blob (svg_blob,
index_offset + (unsigned int) svgDoc,
svgDocLength);
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -73,40 +73,32 @@ struct SVGDocumentIndexEntry
struct SVG
{
- static const hb_tag_t tableTag = HB_OT_TAG_SVG;
+ enum { tableTag = HB_OT_TAG_SVG };
- inline bool has_data (void) const { return svgDocEntries; }
+ bool has_data () const { return svgDocEntries; }
struct accelerator_t
{
- inline void init (hb_face_t *face)
- {
- table = hb_sanitize_context_t().reference_table<SVG> (face);
- }
+ void init (hb_face_t *face)
+ { table = hb_sanitize_context_t().reference_table<SVG> (face); }
+ void fini () { table.destroy (); }
- inline void fini (void)
- {
- table.destroy ();
- }
-
- inline hb_blob_t *reference_blob_for_glyph (hb_codepoint_t glyph_id) const
+ hb_blob_t *reference_blob_for_glyph (hb_codepoint_t glyph_id) const
{
return table->get_glyph_entry (glyph_id).reference_blob (table.get_blob (),
table->svgDocEntries);
}
- inline bool has_data () const { return table->has_data (); }
+ bool has_data () const { return table->has_data (); }
private:
hb_blob_ptr_t<SVG> table;
};
- inline const SVGDocumentIndexEntry &get_glyph_entry (hb_codepoint_t glyph_id) const
- {
- return (this+svgDocEntries).bsearch (glyph_id);
- }
+ const SVGDocumentIndexEntry &get_glyph_entry (hb_codepoint_t glyph_id) const
+ { return (this+svgDocEntries).bsearch (glyph_id); }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color.h
index a4f2053291e..49646bf3ac2 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color.h
@@ -71,7 +71,7 @@ hb_ot_color_palette_color_get_name_id (hb_face_t *face,
typedef enum { /*< flags >*/
HB_OT_COLOR_PALETTE_FLAG_DEFAULT = 0x00000000u,
HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_LIGHT_BACKGROUND = 0x00000001u,
- HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_DARK_BACKGROUND = 0x00000002u,
+ HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_DARK_BACKGROUND = 0x00000002u
} hb_ot_color_palette_flags_t;
HB_EXTERN hb_ot_color_palette_flags_t
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-deprecated.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-deprecated.h
new file mode 100644
index 00000000000..bce51b71e78
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-deprecated.h
@@ -0,0 +1,107 @@
+/*
+ * 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_H_IN
+#error "Include <hb-ot.h> instead."
+#endif
+
+#ifndef HB_OT_DEPRECATED_H
+#define HB_OT_DEPRECATED_H
+
+#include "hb.h"
+#include "hb-ot-name.h"
+
+
+HB_BEGIN_DECLS
+
+#ifndef HB_DISABLE_DEPRECATED
+
+
+/* Like hb_ot_layout_table_find_script, but takes zero-terminated array of scripts to test */
+HB_EXTERN HB_DEPRECATED_FOR (hb_ot_layout_table_select_script) hb_bool_t
+hb_ot_layout_table_choose_script (hb_face_t *face,
+ hb_tag_t table_tag,
+ const hb_tag_t *script_tags,
+ unsigned int *script_index,
+ hb_tag_t *chosen_script);
+
+HB_EXTERN HB_DEPRECATED_FOR (hb_ot_layout_script_select_language) hb_bool_t
+hb_ot_layout_script_find_language (hb_face_t *face,
+ hb_tag_t table_tag,
+ unsigned int script_index,
+ hb_tag_t language_tag,
+ unsigned int *language_index);
+
+HB_EXTERN HB_DEPRECATED_FOR (hb_ot_tags_from_script_and_language) void
+hb_ot_tags_from_script (hb_script_t script,
+ hb_tag_t *script_tag_1,
+ hb_tag_t *script_tag_2);
+
+HB_EXTERN HB_DEPRECATED_FOR (hb_ot_tags_from_script_and_language) hb_tag_t
+hb_ot_tag_from_language (hb_language_t language);
+
+
+/**
+ * HB_OT_VAR_NO_AXIS_INDEX:
+ *
+ * Since: 1.4.2
+ * Deprecated: 2.2.0
+ */
+#define HB_OT_VAR_NO_AXIS_INDEX 0xFFFFFFFFu
+
+/**
+ * hb_ot_var_axis_t:
+ *
+ * Since: 1.4.2
+ * Deprecated: 2.2.0
+ */
+typedef struct hb_ot_var_axis_t
+{
+ hb_tag_t tag;
+ hb_ot_name_id_t name_id;
+ float min_value;
+ float default_value;
+ float max_value;
+} hb_ot_var_axis_t;
+
+HB_EXTERN HB_DEPRECATED_FOR (hb_ot_var_get_axis_infos) unsigned int
+hb_ot_var_get_axes (hb_face_t *face,
+ unsigned int start_offset,
+ unsigned int *axes_count /* IN/OUT */,
+ hb_ot_var_axis_t *axes_array /* OUT */);
+
+HB_EXTERN HB_DEPRECATED_FOR (hb_ot_var_find_axis_info) hb_bool_t
+hb_ot_var_find_axis (hb_face_t *face,
+ hb_tag_t axis_tag,
+ unsigned int *axis_index,
+ hb_ot_var_axis_t *axis_info);
+
+
+#endif
+
+HB_END_DECLS
+
+#endif /* HB_OT_DEPRECATED_H */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-face.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-face.cc
index c7dafdd4ab9..9b17526b7e4 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-face.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-face.cc
@@ -28,6 +28,8 @@
#include "hb-ot-cmap-table.hh"
#include "hb-ot-glyf-table.hh"
+#include "hb-ot-cff1-table.hh"
+#include "hb-ot-cff2-table.hh"
#include "hb-ot-hmtx-table.hh"
#include "hb-ot-kern-table.hh"
#include "hb-ot-name-table.hh"
@@ -49,7 +51,7 @@ void hb_ot_face_t::init0 (hb_face_t *face)
#undef HB_OT_ACCELERATOR
#undef HB_OT_TABLE
}
-void hb_ot_face_t::fini (void)
+void hb_ot_face_t::fini ()
{
#define HB_OT_TABLE(Namespace, Type) Type.fini ();
#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-face.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-face.hh
index 4a3260626c2..7f47ba6cb8e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-face.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-face.hh
@@ -47,6 +47,8 @@
HB_OT_ACCELERATOR(OT, post) \
HB_OT_TABLE(OT, kern) \
HB_OT_ACCELERATOR(OT, glyf) \
+ HB_OT_ACCELERATOR(OT, cff1) \
+ HB_OT_ACCELERATOR(OT, cff2) \
HB_OT_TABLE(OT, VORG) \
HB_OT_ACCELERATOR(OT, name) \
HB_OT_TABLE(OT, OS2) \
@@ -90,7 +92,7 @@ HB_OT_TABLES
struct hb_ot_face_t
{
HB_INTERNAL void init0 (hb_face_t *face);
- HB_INTERNAL void fini (void);
+ HB_INTERNAL void fini ();
#define HB_OT_TABLE_ORDER(Namespace, Type) \
HB_PASTE (ORDER_, HB_PASTE (Namespace, HB_PASTE (_, Type)))
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 7c91362509c..c080f0fd937 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
@@ -34,6 +34,8 @@
#include "hb-ot-cmap-table.hh"
#include "hb-ot-glyf-table.hh"
+#include "hb-ot-cff1-table.hh"
+#include "hb-ot-cff2-table.hh"
#include "hb-ot-hmtx-table.hh"
#include "hb-ot-kern-table.hh"
#include "hb-ot-os2-table.hh"
@@ -182,6 +184,10 @@ hb_ot_get_glyph_extents (hb_font_t *font,
if (!ret)
ret = ot_face->glyf->get_extents (glyph, extents);
if (!ret)
+ ret = ot_face->cff1->get_extents (glyph, extents);
+ if (!ret)
+ ret = ot_face->cff2->get_extents (font, glyph, extents);
+ if (!ret)
ret = ot_face->CBDT->get_extents (font, glyph, extents);
// TODO Hook up side-bearings variations.
extents->x_bearing = font->em_scale_x (extents->x_bearing);
@@ -244,12 +250,12 @@ hb_ot_get_font_v_extents (hb_font_t *font,
}
#if HB_USE_ATEXIT
-static void free_static_ot_funcs (void);
+static void free_static_ot_funcs ();
#endif
static struct hb_ot_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ot_font_funcs_lazy_loader_t>
{
- static inline hb_font_funcs_t *create (void)
+ static hb_font_funcs_t *create ()
{
hb_font_funcs_t *funcs = hb_font_funcs_create ();
@@ -279,14 +285,14 @@ static struct hb_ot_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ot
#if HB_USE_ATEXIT
static
-void free_static_ot_funcs (void)
+void free_static_ot_funcs ()
{
static_ot_funcs.free_instance ();
}
#endif
static hb_font_funcs_t *
-_hb_ot_get_font_funcs (void)
+_hb_ot_get_font_funcs ()
{
return static_ot_funcs.get_unconst ();
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-gasp-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-gasp-table.hh
new file mode 100644
index 00000000000..d328fd22243
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-gasp-table.hh
@@ -0,0 +1,84 @@
+/*
+ * 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_GASP_TABLE_HH
+#define HB_OT_GASP_TABLE_HH
+
+#include "hb-open-type.hh"
+#include "hb-ot-hhea-table.hh"
+#include "hb-ot-os2-table.hh"
+#include "hb-ot-var-hvar-table.hh"
+
+/*
+ * gasp -- Grid-fitting and Scan-conversion Procedure
+ * https://docs.microsoft.com/en-us/typography/opentype/spec/gasp
+ */
+#define HB_OT_TAG_gasp HB_TAG('g','a','s','p')
+
+
+namespace OT {
+
+struct GaspRange
+{
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ public:
+ HBUINT16 rangeMaxPPEM; /* Upper limit of range, in PPEM */
+ HBUINT16 rangeGaspBehavior;
+ /* Flags describing desired rasterizer behavior. */
+ public:
+ DEFINE_SIZE_STATIC (4);
+};
+
+struct gasp
+{
+ enum { tableTag = HB_OT_TAG_gasp };
+
+ const GaspRange &get_gasp_range (unsigned int i) const
+ { return gaspRanges[i]; }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ gaspRanges.sanitize (c));
+ }
+
+ protected:
+ HBUINT16 version; /* Version number (set to 1) */
+ ArrayOf<GaspRange>
+ gaspRanges; /* Number of records to follow
+ * Sorted by ppem */
+ public:
+ DEFINE_SIZE_ARRAY (4, gaspRanges);
+};
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_GASP_TABLE_HH */
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 c88f43385b4..a6dec40d240 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
@@ -45,9 +45,9 @@ struct loca
{
friend struct glyf;
- static const hb_tag_t tableTag = HB_OT_TAG_loca;
+ enum { tableTag = HB_OT_TAG_loca };
- inline bool sanitize (hb_sanitize_context_t *c HB_UNUSED) const
+ bool sanitize (hb_sanitize_context_t *c HB_UNUSED) const
{
TRACE_SANITIZE (this);
return_trace (true);
@@ -71,9 +71,9 @@ struct loca
struct glyf
{
- static const hb_tag_t tableTag = HB_OT_TAG_glyf;
+ enum { tableTag = HB_OT_TAG_glyf };
- inline bool sanitize (hb_sanitize_context_t *c HB_UNUSED) const
+ bool sanitize (hb_sanitize_context_t *c HB_UNUSED) const
{
TRACE_SANITIZE (this);
/* We don't check for anything specific here. The users of the
@@ -81,7 +81,7 @@ struct glyf
return_trace (true);
}
- inline bool subset (hb_subset_plan_t *plan) const
+ bool subset (hb_subset_plan_t *plan) const
{
hb_blob_t *glyf_prime = nullptr;
hb_blob_t *loca_prime = nullptr;
@@ -153,7 +153,7 @@ struct glyf
HBUINT16 flags;
GlyphID glyphIndex;
- inline unsigned int get_size (void) const
+ unsigned int get_size () const
{
unsigned int size = min_size;
// arg1 and 2 are int16
@@ -177,7 +177,7 @@ struct glyf
const char *glyph_end;
const CompositeGlyphHeader *current;
- inline bool move_to_next ()
+ bool move_to_next ()
{
if (current->flags & CompositeGlyphHeader::MORE_COMPONENTS)
{
@@ -191,7 +191,7 @@ struct glyf
return false;
}
- inline bool in_range (const CompositeGlyphHeader *composite) const
+ bool in_range (const CompositeGlyphHeader *composite) const
{
return (const char *) composite >= glyph_start
&& ((const char *) composite + CompositeGlyphHeader::min_size) <= glyph_end
@@ -199,7 +199,7 @@ struct glyf
}
};
- static inline bool get_iterator (const char * glyph_data,
+ static bool get_iterator (const char * glyph_data,
unsigned int length,
CompositeGlyphHeader::Iterator *iterator /* OUT */)
{
@@ -228,7 +228,7 @@ struct glyf
struct accelerator_t
{
- inline void init (hb_face_t *face)
+ void init (hb_face_t *face)
{
memset (this, 0, sizeof (accelerator_t));
@@ -244,7 +244,7 @@ struct glyf
num_glyphs = MAX (1u, loca_table.get_length () / (short_offset ? 2 : 4)) - 1;
}
- inline void fini (void)
+ void fini ()
{
loca_table.destroy ();
glyf_table.destroy ();
@@ -255,8 +255,8 @@ struct glyf
* 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
+ bool get_composite (hb_codepoint_t glyph,
+ CompositeGlyphHeader::Iterator *composite /* OUT */) const
{
if (unlikely (!num_glyphs))
return false;
@@ -271,15 +271,18 @@ struct glyf
}
enum simple_glyph_flag_t {
+ FLAG_ON_CURVE = 0x01,
FLAG_X_SHORT = 0x02,
FLAG_Y_SHORT = 0x04,
FLAG_REPEAT = 0x08,
FLAG_X_SAME = 0x10,
- FLAG_Y_SAME = 0x20
+ FLAG_Y_SAME = 0x20,
+ FLAG_RESERVED1 = 0x40,
+ FLAG_RESERVED2 = 0x80
};
/* based on FontTools _g_l_y_f.py::trim */
- inline bool remove_padding (unsigned int start_offset,
+ bool remove_padding (unsigned int start_offset,
unsigned int *end_offset) const
{
if (*end_offset - start_offset < GlyphHeader::static_size) return true;
@@ -351,7 +354,7 @@ struct glyf
return true;
}
- inline bool get_offsets (hb_codepoint_t glyph,
+ bool get_offsets (hb_codepoint_t glyph,
unsigned int *start_offset /* OUT */,
unsigned int *end_offset /* OUT */) const
{
@@ -378,10 +381,10 @@ struct glyf
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
+ 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)
{
@@ -437,8 +440,7 @@ struct glyf
return true;
}
- inline bool get_extents (hb_codepoint_t glyph,
- hb_glyph_extents_t *extents) const
+ 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))
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
index 0fea24bca24..48421ee2cbb 100644
--- 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
@@ -47,21 +47,19 @@ struct DeviceRecord
unsigned int sizeDeviceRecord;
hb_subset_plan_t *subset_plan;
- inline void init (const DeviceRecord *source_device_record,
- unsigned int sizeDeviceRecord,
- hb_subset_plan_t *subset_plan)
+ void init (const DeviceRecord *source_device_record,
+ unsigned int sizeDeviceRecord,
+ hb_subset_plan_t *subset_plan)
{
this->source_device_record = source_device_record;
this->sizeDeviceRecord = sizeDeviceRecord;
this->subset_plan = subset_plan;
}
- inline unsigned int len () const
- {
- return this->subset_plan->glyphs.len;
- }
+ unsigned int len () const
+ { return this->subset_plan->glyphs.len; }
- inline const HBUINT8* operator [] (unsigned int i) const
+ const HBUINT8* operator [] (unsigned int i) const
{
if (unlikely (i >= len ())) return nullptr;
hb_codepoint_t gid = this->subset_plan->glyphs [i];
@@ -72,12 +70,10 @@ struct DeviceRecord
}
};
- static inline unsigned int get_size (unsigned int count)
- {
- return hb_ceil_to_4 (min_size + count * HBUINT8::static_size);
- }
+ static unsigned int get_size (unsigned int count)
+ { return hb_ceil_to_4 (min_size + count * HBUINT8::static_size); }
- inline bool serialize (hb_serialize_context_t *c, const SubsetView &subset_view)
+ bool serialize (hb_serialize_context_t *c, const SubsetView &subset_view)
{
TRACE_SERIALIZE (this);
@@ -106,7 +102,7 @@ struct DeviceRecord
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int sizeDeviceRecord) const
+ bool sanitize (hb_sanitize_context_t *c, unsigned int sizeDeviceRecord) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -123,14 +119,12 @@ struct DeviceRecord
struct hdmx
{
- static const hb_tag_t tableTag = HB_OT_TAG_hdmx;
+ enum { tableTag = HB_OT_TAG_hdmx };
- inline unsigned int get_size (void) const
- {
- return min_size + numRecords * sizeDeviceRecord;
- }
+ unsigned int get_size () const
+ { return min_size + numRecords * sizeDeviceRecord; }
- inline const DeviceRecord& operator [] (unsigned int i) const
+ const DeviceRecord& operator [] (unsigned int i) const
{
/* XXX Null(DeviceRecord) is NOT safe as it's num-glyphs lengthed.
* https://github.com/harfbuzz/harfbuzz/issues/1300 */
@@ -138,7 +132,7 @@ struct hdmx
return StructAtOffset<DeviceRecord> (&this->firstDeviceRecord, i * sizeDeviceRecord);
}
- inline bool serialize (hb_serialize_context_t *c, const hdmx *source_hdmx, hb_subset_plan_t *plan)
+ bool serialize (hb_serialize_context_t *c, const hdmx *source_hdmx, hb_subset_plan_t *plan)
{
TRACE_SERIALIZE (this);
@@ -160,12 +154,12 @@ struct hdmx
return_trace (true);
}
- static inline size_t get_subsetted_size (const hdmx *source_hdmx, hb_subset_plan_t *plan)
+ static size_t get_subsetted_size (const hdmx *source_hdmx, hb_subset_plan_t *plan)
{
return min_size + source_hdmx->numRecords * DeviceRecord::get_size (plan->glyphs.len);
}
- inline bool subset (hb_subset_plan_t *plan) const
+ bool subset (hb_subset_plan_t *plan) const
{
size_t dest_size = get_subsetted_size (this, plan);
hdmx *dest = (hdmx *) malloc (dest_size);
@@ -196,7 +190,7 @@ struct hdmx
return result;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
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 602e365ce5d..41062ca326a 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
@@ -45,16 +45,29 @@ struct head
{
friend struct OffsetTable;
- static const hb_tag_t tableTag = HB_OT_TAG_head;
+ enum { tableTag = HB_OT_TAG_head };
- inline unsigned int get_upem (void) const
+ unsigned int get_upem () const
{
unsigned int upem = unitsPerEm;
/* If no valid head table found, assume 1000, which matches typical Type1 usage. */
return 16 <= upem && upem <= 16384 ? upem : 1000;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ enum mac_style_flag_t {
+ BOLD = 1u<<0,
+ ITALIC = 1u<<1,
+ UNDERLINE = 1u<<2,
+ OUTLINE = 1u<<3,
+ SHADOW = 1u<<4,
+ CONDENSED = 1u<<5
+ };
+
+ bool is_bold () const { return macStyle & BOLD; }
+ bool is_italic () const { return macStyle & ITALIC; }
+ bool is_condensed () const { return macStyle & CONDENSED; }
+
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
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 3336cadd472..7bc1817eefe 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
@@ -45,7 +45,7 @@ namespace OT {
template <typename T>
struct _hea
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && likely (version.major == 1));
@@ -86,10 +86,10 @@ struct _hea
};
struct hhea : _hea<hhea> {
- static const hb_tag_t tableTag = HB_OT_TAG_hhea;
+ enum { tableTag = HB_OT_TAG_hhea };
};
struct vhea : _hea<vhea> {
- static const hb_tag_t tableTag = HB_OT_TAG_vhea;
+ enum { 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 091b601173f..fa74a0e3858 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
@@ -56,7 +56,7 @@ struct LongMetric
template <typename T, typename H>
struct hmtxvmtx
{
- inline bool sanitize (hb_sanitize_context_t *c HB_UNUSED) const
+ bool sanitize (hb_sanitize_context_t *c HB_UNUSED) const
{
TRACE_SANITIZE (this);
/* We don't check for anything specific here. The users of the
@@ -65,7 +65,7 @@ struct hmtxvmtx
}
- inline bool subset_update_header (hb_subset_plan_t *plan,
+ bool subset_update_header (hb_subset_plan_t *plan,
unsigned int num_hmetrics) const
{
hb_blob_t *src_blob = hb_sanitize_context_t ().reference_table<H> (plan->source, H::tableTag);
@@ -86,7 +86,7 @@ struct hmtxvmtx
return result;
}
- inline bool subset (hb_subset_plan_t *plan) const
+ bool subset (hb_subset_plan_t *plan) const
{
typename T::accelerator_t _mtx;
_mtx.init (plan->source);
@@ -186,22 +186,18 @@ struct hmtxvmtx
{
friend struct hmtxvmtx;
- inline void init (hb_face_t *face,
+ void init (hb_face_t *face,
unsigned int default_advance_ = 0)
{
default_advance = default_advance_ ? default_advance_ : hb_face_get_upem (face);
bool got_font_extents = false;
- if (T::os2Tag)
+ if (T::os2Tag != HB_TAG_NONE && face->table.OS2->is_typo_metrics ())
{
-#define USE_TYPO_METRICS (1u<<7)
- if (0 != (face->table.OS2->fsSelection & USE_TYPO_METRICS))
- {
- ascender = abs (face->table.OS2->sTypoAscender);
- descender = -abs (face->table.OS2->sTypoDescender);
- line_gap = face->table.OS2->sTypoLineGap;
- got_font_extents = (ascender | descender) != 0;
- }
+ ascender = abs (face->table.OS2->sTypoAscender);
+ descender = -abs (face->table.OS2->sTypoDescender);
+ line_gap = face->table.OS2->sTypoLineGap;
+ got_font_extents = (ascender | descender) != 0;
}
hb_blob_t *_hea_blob = hb_sanitize_context_t().reference_table<H> (face);
@@ -238,14 +234,14 @@ struct hmtxvmtx
var_table = hb_sanitize_context_t().reference_table<HVARVVAR> (face, T::variationsTag);
}
- inline void fini (void)
+ void fini ()
{
table.destroy ();
var_table.destroy ();
}
/* TODO Add variations version. */
- inline unsigned int get_side_bearing (hb_codepoint_t glyph) const
+ unsigned int get_side_bearing (hb_codepoint_t glyph) const
{
if (glyph < num_advances)
return table->longMetricZ[glyph].sb;
@@ -257,7 +253,7 @@ struct hmtxvmtx
return bearings[glyph - num_advances];
}
- inline unsigned int get_advance (hb_codepoint_t glyph) const
+ unsigned int get_advance (hb_codepoint_t glyph) const
{
if (unlikely (glyph >= num_metrics))
{
@@ -273,8 +269,8 @@ struct hmtxvmtx
return table->longMetricZ[MIN (glyph, (uint32_t) num_advances - 1)].advance;
}
- inline unsigned int get_advance (hb_codepoint_t glyph,
- hb_font_t *font) const
+ unsigned int get_advance (hb_codepoint_t glyph,
+ hb_font_t *font) const
{
unsigned int advance = get_advance (glyph);
if (likely (glyph < num_metrics))
@@ -327,14 +323,14 @@ struct hmtxvmtx
};
struct hmtx : hmtxvmtx<hmtx, hhea> {
- static const hb_tag_t tableTag = HB_OT_TAG_hmtx;
- static const hb_tag_t variationsTag = HB_OT_TAG_HVAR;
- static const hb_tag_t os2Tag = HB_OT_TAG_OS2;
+ enum { tableTag = HB_OT_TAG_hmtx };
+ enum { variationsTag = HB_OT_TAG_HVAR };
+ enum { os2Tag = HB_OT_TAG_OS2 };
};
struct vmtx : hmtxvmtx<vmtx, vhea> {
- static const hb_tag_t tableTag = HB_OT_TAG_vmtx;
- static const hb_tag_t variationsTag = HB_OT_TAG_VVAR;
- static const hb_tag_t os2Tag = HB_TAG_NONE;
+ enum { tableTag = HB_OT_TAG_vmtx };
+ enum { variationsTag = HB_OT_TAG_VVAR };
+ enum { os2Tag = HB_TAG_NONE };
};
struct hmtx_accelerator_t : hmtx::accelerator_t {};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh
index b57ebaea8dc..5e75d083b76 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-kern-table.hh
@@ -44,7 +44,7 @@ namespace OT {
template <typename KernSubTableHeader>
struct KernSubTableFormat3
{
- inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
+ int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
{
hb_array_t<const FWORD> kernValue = kernValueZ.as_array (kernValueCount);
hb_array_t<const HBUINT8> leftClass = StructAfter<const UnsizedArrayOf<HBUINT8> > (kernValue).as_array (glyphCount);
@@ -59,7 +59,7 @@ struct KernSubTableFormat3
return kernValue[kernIndex[i]];
}
- inline bool apply (AAT::hb_aat_apply_context_t *c) const
+ bool apply (AAT::hb_aat_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -75,7 +75,7 @@ struct KernSubTableFormat3
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -109,10 +109,10 @@ struct KernSubTableFormat3
template <typename KernSubTableHeader>
struct KernSubTable
{
- inline unsigned int get_size (void) const { return u.header.length; }
- inline unsigned int get_type (void) const { return u.header.format; }
+ unsigned int get_size () const { return u.header.length; }
+ unsigned int get_type () const { return u.header.format; }
- inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
+ int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
{
switch (get_type ()) {
/* This method hooks up to hb_font_t's get_h_kerning. Only support Format0. */
@@ -122,7 +122,7 @@ struct KernSubTable
}
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
unsigned int subtable_type = get_type ();
TRACE_DISPATCH (this, subtable_type);
@@ -135,7 +135,7 @@ struct KernSubTable
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!u.header.sanitize (c) ||
@@ -160,11 +160,11 @@ struct KernSubTable
struct KernOTSubTableHeader
{
- static const bool apple = false;
+ enum { apple = false };
typedef AAT::ObsoleteTypes Types;
- inline unsigned int tuple_count (void) const { return 0; }
- inline bool is_horizontal (void) const { return (coverage & Horizontal); }
+ unsigned int tuple_count () const { return 0; }
+ bool is_horizontal () const { return (coverage & Horizontal); }
enum Coverage
{
@@ -178,7 +178,7 @@ struct KernOTSubTableHeader
Variation = 0x00u,
};
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -197,8 +197,8 @@ struct KernOT : AAT::KerxTable<KernOT>
{
friend struct AAT::KerxTable<KernOT>;
- static const hb_tag_t tableTag = HB_OT_TAG_kern;
- static const uint16_t minVersion = 0;
+ enum { tableTag = HB_OT_TAG_kern };
+ enum { minVersion = 0u };
typedef KernOTSubTableHeader SubTableHeader;
typedef SubTableHeader::Types Types;
@@ -215,11 +215,11 @@ struct KernOT : AAT::KerxTable<KernOT>
struct KernAATSubTableHeader
{
- static const bool apple = true;
+ enum { apple = true };
typedef AAT::ObsoleteTypes Types;
- inline unsigned int tuple_count (void) const { return 0; }
- inline bool is_horizontal (void) const { return !(coverage & Vertical); }
+ unsigned int tuple_count () const { return 0; }
+ bool is_horizontal () const { return !(coverage & Vertical); }
enum Coverage
{
@@ -231,7 +231,7 @@ struct KernAATSubTableHeader
Backwards = 0x00u,
};
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -252,8 +252,8 @@ struct KernAAT : AAT::KerxTable<KernAAT>
{
friend struct AAT::KerxTable<KernAAT>;
- static const hb_tag_t tableTag = HB_OT_TAG_kern;
- static const uint32_t minVersion = 0x00010000u;
+ enum { tableTag = HB_OT_TAG_kern };
+ enum { minVersion = 0x00010000u };
typedef KernAATSubTableHeader SubTableHeader;
typedef SubTableHeader::Types Types;
@@ -269,12 +269,12 @@ struct KernAAT : AAT::KerxTable<KernAAT>
struct kern
{
- static const hb_tag_t tableTag = HB_OT_TAG_kern;
+ enum { tableTag = HB_OT_TAG_kern };
- inline bool has_data (void) const { return u.version32; }
- inline unsigned int get_type (void) const { return u.major; }
+ bool has_data () const { return u.version32; }
+ unsigned int get_type () const { return u.major; }
- inline bool has_state_machine (void) const
+ bool has_state_machine () const
{
switch (get_type ()) {
case 0: return u.ot.has_state_machine ();
@@ -283,7 +283,7 @@ struct kern
}
}
- inline bool has_cross_stream (void) const
+ bool has_cross_stream () const
{
switch (get_type ()) {
case 0: return u.ot.has_cross_stream ();
@@ -292,7 +292,7 @@ struct kern
}
}
- inline int get_h_kerning (hb_codepoint_t left, hb_codepoint_t right) const
+ int get_h_kerning (hb_codepoint_t left, hb_codepoint_t right) const
{
switch (get_type ()) {
case 0: return u.ot.get_h_kerning (left, right);
@@ -301,11 +301,11 @@ struct kern
}
}
- inline bool apply (AAT::hb_aat_apply_context_t *c) const
+ bool apply (AAT::hb_aat_apply_context_t *c) const
{ return dispatch (c); }
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
unsigned int subtable_type = get_type ();
TRACE_DISPATCH (this, subtable_type);
@@ -316,7 +316,7 @@ struct kern
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!u.version32.sanitize (c)) return_trace (false);
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
index fb57e76242e..6c39932670f 100644
--- 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
@@ -44,9 +44,9 @@ namespace OT {
struct BaseCoordFormat1
{
- inline hb_position_t get_coord () const { return coordinate; }
+ hb_position_t get_coord () const { return coordinate; }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -61,13 +61,13 @@ struct BaseCoordFormat1
struct BaseCoordFormat2
{
- inline hb_position_t get_coord () const
+ hb_position_t get_coord () const
{
/* TODO */
return coordinate;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -85,9 +85,9 @@ struct BaseCoordFormat2
struct BaseCoordFormat3
{
- inline hb_position_t get_coord (hb_font_t *font,
- const VariationStore &var_store,
- hb_direction_t direction) const
+ hb_position_t get_coord (hb_font_t *font,
+ const VariationStore &var_store,
+ hb_direction_t direction) const
{
const Device &device = this+deviceTable;
return coordinate + (HB_DIRECTION_IS_VERTICAL (direction) ?
@@ -96,7 +96,7 @@ struct BaseCoordFormat3
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -116,9 +116,9 @@ struct BaseCoordFormat3
struct BaseCoord
{
- inline hb_position_t get_coord (hb_font_t *font,
- const VariationStore &var_store,
- hb_direction_t direction) const
+ hb_position_t get_coord (hb_font_t *font,
+ const VariationStore &var_store,
+ hb_direction_t direction) const
{
switch (u.format) {
case 1: return u.format1.get_coord ();
@@ -128,7 +128,7 @@ struct BaseCoord
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!u.format.sanitize (c))) return_trace (false);
@@ -162,13 +162,13 @@ struct FeatMinMaxRecord
0;
}
- inline void get_min_max (const BaseCoord **min, const BaseCoord **max) const
+ void get_min_max (const BaseCoord **min, const BaseCoord **max) const
{
if (likely (min)) *min = &(this+minCoord);
if (likely (max)) *max = &(this+maxCoord);
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -194,7 +194,7 @@ struct FeatMinMaxRecord
struct MinMax
{
- inline void get_min_max (hb_tag_t feature_tag,
+ void get_min_max (hb_tag_t feature_tag,
const BaseCoord **min,
const BaseCoord **max) const
{
@@ -213,7 +213,7 @@ struct MinMax
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -241,13 +241,13 @@ struct MinMax
struct BaseValues
{
- inline const BaseCoord &get_base_coord (int baseline_tag_index) const
+ const BaseCoord &get_base_coord (int baseline_tag_index) const
{
if (baseline_tag_index == -1) baseline_tag_index = defaultIndex;
return this+baseCoords[baseline_tag_index];
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -280,10 +280,10 @@ struct BaseLangSysRecord
0;
}
- inline const MinMax &get_min_max () const
+ const MinMax &get_min_max () const
{ return this+minMax; }
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -301,7 +301,7 @@ struct BaseLangSysRecord
struct BaseScript
{
- inline const MinMax &get_min_max (hb_tag_t language_tag) const
+ const MinMax &get_min_max (hb_tag_t language_tag) const
{
/* TODO Replace hb_bsearch() with .bsearch(). */
const BaseLangSysRecord* record = (const BaseLangSysRecord *)
@@ -312,13 +312,12 @@ struct BaseScript
return record ? record->get_min_max () : this+defaultMinMax;
}
- inline const BaseCoord &get_base_coord (int baseline_tag_index) const
+ const BaseCoord &get_base_coord (int baseline_tag_index) const
{ return (this+baseValues).get_base_coord (baseline_tag_index); }
- inline bool is_empty () const
- { return !baseValues; }
+ bool is_empty () const { return !baseValues; }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -355,10 +354,10 @@ struct BaseScriptRecord
0;
}
- inline const BaseScript &get_base_script (const BaseScriptList *list) const
+ const BaseScript &get_base_script (const BaseScriptList *list) const
{ return list+baseScript; }
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -377,7 +376,7 @@ struct BaseScriptRecord
struct BaseScriptList
{
- inline const BaseScriptRecord *find_record (hb_tag_t script) const
+ const BaseScriptRecord *find_record (hb_tag_t script) const
{
/* TODO Replace hb_bsearch() with .bsearch(). */
return (const BaseScriptRecord *) hb_bsearch (&script, baseScriptRecords.arrayZ,
@@ -387,7 +386,7 @@ struct BaseScriptList
}
/* TODO: Or client should handle fallback? */
- inline const BaseScript &get_base_script (hb_tag_t script) const
+ const BaseScript &get_base_script (hb_tag_t script) const
{
const BaseScriptRecord *record = find_record (script);
if (!record) record = find_record ((hb_script_t) HB_TAG ('D','F','L','T'));
@@ -395,7 +394,7 @@ struct BaseScriptList
return record ? record->get_base_script (this) : Null (BaseScript);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -412,7 +411,7 @@ struct BaseScriptList
struct Axis
{
- inline bool get_baseline (hb_ot_layout_baseline_t baseline,
+ bool get_baseline (hb_ot_layout_baseline_t baseline,
hb_tag_t script_tag,
hb_tag_t language_tag,
const BaseCoord **coord) const
@@ -425,11 +424,11 @@ struct Axis
return true;
}
- inline bool get_min_max (hb_tag_t script_tag,
- hb_tag_t language_tag,
- hb_tag_t feature_tag,
- const BaseCoord **min_coord,
- const BaseCoord **max_coord) const
+ bool get_min_max (hb_tag_t script_tag,
+ hb_tag_t language_tag,
+ hb_tag_t feature_tag,
+ const BaseCoord **min_coord,
+ const BaseCoord **max_coord) const
{
const BaseScript &base_script = (this+baseScriptList).get_base_script (script_tag);
if (base_script.is_empty ()) return false;
@@ -439,7 +438,7 @@ struct Axis
return true;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
@@ -465,20 +464,20 @@ struct Axis
struct BASE
{
- static const hb_tag_t tableTag = HB_OT_TAG_BASE;
+ enum { tableTag = HB_OT_TAG_BASE };
- inline const Axis &get_axis (hb_direction_t direction) const
+ const Axis &get_axis (hb_direction_t direction) const
{ return HB_DIRECTION_IS_VERTICAL (direction) ? this+vAxis : this+hAxis; }
- inline const VariationStore &get_var_store () const
+ const VariationStore &get_var_store () const
{ return version.to_int () < 0x00010001u ? Null (VariationStore) : this+varStore; }
- inline bool get_baseline (hb_font_t *font,
- hb_ot_layout_baseline_t baseline,
- hb_direction_t direction,
- hb_tag_t script_tag,
- hb_tag_t language_tag,
- hb_position_t *base) const
+ bool get_baseline (hb_font_t *font,
+ hb_ot_layout_baseline_t baseline,
+ hb_direction_t direction,
+ hb_tag_t script_tag,
+ hb_tag_t language_tag,
+ hb_position_t *base) const
{
const BaseCoord *base_coord;
if (!get_axis (direction).get_baseline (baseline, script_tag, language_tag, &base_coord))
@@ -491,13 +490,13 @@ struct BASE
}
/* TODO: Expose this separately sometime? */
- inline bool get_min_max (hb_font_t *font,
- hb_direction_t direction,
- hb_tag_t script_tag,
- hb_tag_t language_tag,
- hb_tag_t feature_tag,
- hb_position_t *min,
- hb_position_t *max)
+ bool get_min_max (hb_font_t *font,
+ hb_direction_t direction,
+ hb_tag_t script_tag,
+ hb_tag_t language_tag,
+ hb_tag_t feature_tag,
+ hb_position_t *min,
+ hb_position_t *max)
{
const BaseCoord *min_coord, *max_coord;
if (!get_axis (direction).get_min_max (script_tag, language_tag, feature_tag,
@@ -510,7 +509,7 @@ struct BASE
return true;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common.hh
index b5af73af64a..d9f5728b65c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common.hh
@@ -86,11 +86,9 @@ struct Record_sanitize_closure_t {
template <typename Type>
struct Record
{
- inline int cmp (hb_tag_t a) const {
- return tag.cmp (a);
- }
+ int cmp (hb_tag_t a) const { return tag.cmp (a); }
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
const Record_sanitize_closure_t closure = {tag, base};
@@ -108,15 +106,15 @@ struct Record
template <typename Type>
struct RecordArrayOf : SortedArrayOf<Record<Type> >
{
- inline const OffsetTo<Type>& get_offset (unsigned int i) const
+ const OffsetTo<Type>& get_offset (unsigned int i) const
{ return (*this)[i].offset; }
- inline OffsetTo<Type>& get_offset (unsigned int i)
+ OffsetTo<Type>& get_offset (unsigned int i)
{ return (*this)[i].offset; }
- inline const Tag& get_tag (unsigned int i) const
+ const Tag& get_tag (unsigned int i) const
{ return (*this)[i].tag; }
- inline unsigned int get_tags (unsigned int start_offset,
- unsigned int *record_count /* IN/OUT */,
- hb_tag_t *record_tags /* OUT */) const
+ unsigned int get_tags (unsigned int start_offset,
+ unsigned int *record_count /* IN/OUT */,
+ hb_tag_t *record_tags /* OUT */) const
{
if (record_count) {
const Record<Type> *arr = this->sub_array (start_offset, record_count);
@@ -126,7 +124,7 @@ struct RecordArrayOf : SortedArrayOf<Record<Type> >
}
return this->len;
}
- inline bool find_index (hb_tag_t tag, unsigned int *index) const
+ bool find_index (hb_tag_t tag, unsigned int *index) const
{
return this->bfind (tag, index, HB_BFIND_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX);
}
@@ -135,10 +133,10 @@ struct RecordArrayOf : SortedArrayOf<Record<Type> >
template <typename Type>
struct RecordListOf : RecordArrayOf<Type>
{
- inline const Type& operator [] (unsigned int i) const
+ const Type& operator [] (unsigned int i) const
{ return this+this->get_offset (i); }
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
struct RecordListOf<Type> *out = c->serializer->embed (*this);
@@ -149,7 +147,7 @@ struct RecordListOf : RecordArrayOf<Type>
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (RecordArrayOf<Type>::sanitize (c, this));
@@ -159,23 +157,21 @@ struct RecordListOf : RecordArrayOf<Type>
struct RangeRecord
{
- inline int cmp (hb_codepoint_t g) const {
- return g < start ? -1 : g <= end ? 0 : +1 ;
- }
+ int cmp (hb_codepoint_t g) const
+ { return g < start ? -1 : g <= end ? 0 : +1; }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
}
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{ return glyphs->intersects (start, end); }
template <typename set_t>
- inline bool add_coverage (set_t *glyphs) const {
- return glyphs->add_range (start, end);
- }
+ bool add_coverage (set_t *glyphs) const
+ { return glyphs->add_range (start, end); }
GlyphID start; /* First GlyphID in the range */
GlyphID end; /* Last GlyphID in the range */
@@ -188,9 +184,9 @@ DECLARE_NULL_NAMESPACE_BYTES (OT, RangeRecord);
struct IndexArray : ArrayOf<Index>
{
- inline unsigned int get_indexes (unsigned int start_offset,
- unsigned int *_count /* IN/OUT */,
- unsigned int *_indexes /* OUT */) const
+ unsigned int get_indexes (unsigned int start_offset,
+ unsigned int *_count /* IN/OUT */,
+ unsigned int *_indexes /* OUT */) const
{
if (_count) {
const HBUINT16 *arr = this->sub_array (start_offset, _count);
@@ -201,7 +197,7 @@ struct IndexArray : ArrayOf<Index>
return this->len;
}
- inline void add_indexes_to (hb_set_t* output /* OUT */) const
+ void add_indexes_to (hb_set_t* output /* OUT */) const
{
output->add_array (arrayZ, len);
}
@@ -215,33 +211,33 @@ struct Feature;
struct LangSys
{
- inline unsigned int get_feature_count (void) const
+ unsigned int get_feature_count () const
{ return featureIndex.len; }
- inline hb_tag_t get_feature_index (unsigned int i) const
+ hb_tag_t get_feature_index (unsigned int i) const
{ return featureIndex[i]; }
- inline unsigned int get_feature_indexes (unsigned int start_offset,
- unsigned int *feature_count /* IN/OUT */,
- unsigned int *feature_indexes /* OUT */) const
+ unsigned int get_feature_indexes (unsigned int start_offset,
+ unsigned int *feature_count /* IN/OUT */,
+ unsigned int *feature_indexes /* OUT */) const
{ return featureIndex.get_indexes (start_offset, feature_count, feature_indexes); }
- inline void add_feature_indexes_to (hb_set_t *feature_indexes) const
+ void add_feature_indexes_to (hb_set_t *feature_indexes) const
{ featureIndex.add_indexes_to (feature_indexes); }
- inline bool has_required_feature (void) const { return reqFeatureIndex != 0xFFFFu; }
- inline unsigned int get_required_feature_index (void) const
+ bool has_required_feature () const { return reqFeatureIndex != 0xFFFFu; }
+ unsigned int get_required_feature_index () const
{
if (reqFeatureIndex == 0xFFFFu)
return Index::NOT_FOUND_INDEX;
return reqFeatureIndex;;
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
return_trace (c->serializer->embed (*this));
}
- inline bool sanitize (hb_sanitize_context_t *c,
- const Record_sanitize_closure_t * = nullptr) const
+ bool sanitize (hb_sanitize_context_t *c,
+ const Record_sanitize_closure_t * = nullptr) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && featureIndex.sanitize (c));
@@ -260,26 +256,26 @@ DECLARE_NULL_NAMESPACE_BYTES (OT, LangSys);
struct Script
{
- inline unsigned int get_lang_sys_count (void) const
+ unsigned int get_lang_sys_count () const
{ return langSys.len; }
- inline const Tag& get_lang_sys_tag (unsigned int i) const
+ const Tag& get_lang_sys_tag (unsigned int i) const
{ return langSys.get_tag (i); }
- inline unsigned int get_lang_sys_tags (unsigned int start_offset,
- unsigned int *lang_sys_count /* IN/OUT */,
- hb_tag_t *lang_sys_tags /* OUT */) const
+ unsigned int get_lang_sys_tags (unsigned int start_offset,
+ unsigned int *lang_sys_count /* IN/OUT */,
+ hb_tag_t *lang_sys_tags /* OUT */) const
{ return langSys.get_tags (start_offset, lang_sys_count, lang_sys_tags); }
- inline const LangSys& get_lang_sys (unsigned int i) const
+ const LangSys& get_lang_sys (unsigned int i) const
{
if (i == Index::NOT_FOUND_INDEX) return get_default_lang_sys ();
return this+langSys[i].offset;
}
- inline bool find_lang_sys_index (hb_tag_t tag, unsigned int *index) const
+ bool find_lang_sys_index (hb_tag_t tag, unsigned int *index) const
{ return langSys.find_index (tag, index); }
- inline bool has_default_lang_sys (void) const { return defaultLangSys != 0; }
- inline const LangSys& get_default_lang_sys (void) const { return this+defaultLangSys; }
+ bool has_default_lang_sys () const { return defaultLangSys != 0; }
+ const LangSys& get_default_lang_sys () const { return this+defaultLangSys; }
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
struct Script *out = c->serializer->embed (*this);
@@ -291,8 +287,8 @@ struct Script
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c,
- const Record_sanitize_closure_t * = nullptr) const
+ bool sanitize (hb_sanitize_context_t *c,
+ const Record_sanitize_closure_t * = nullptr) const
{
TRACE_SANITIZE (this);
return_trace (defaultLangSys.sanitize (c, this) && langSys.sanitize (c, this));
@@ -315,7 +311,7 @@ typedef RecordListOf<Script> ScriptList;
/* https://docs.microsoft.com/en-us/typography/opentype/spec/features_pt#size */
struct FeatureParamsSize
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!c->check_struct (this))) return_trace (false);
@@ -427,7 +423,7 @@ struct FeatureParamsSize
/* https://docs.microsoft.com/en-us/typography/opentype/spec/features_pt#ssxx */
struct FeatureParamsStylisticSet
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
/* Right now minorVersion is at zero. Which means, any table supports
@@ -461,7 +457,7 @@ struct FeatureParamsStylisticSet
/* https://docs.microsoft.com/en-us/typography/opentype/spec/features_ae#cv01-cv99 */
struct FeatureParamsCharacterVariants
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -502,7 +498,7 @@ struct FeatureParamsCharacterVariants
struct FeatureParams
{
- inline bool sanitize (hb_sanitize_context_t *c, hb_tag_t tag) const
+ bool sanitize (hb_sanitize_context_t *c, hb_tag_t tag) const
{
TRACE_SANITIZE (this);
if (tag == HB_TAG ('s','i','z','e'))
@@ -514,21 +510,21 @@ struct FeatureParams
return_trace (true);
}
- inline const FeatureParamsSize& get_size_params (hb_tag_t tag) const
+ const FeatureParamsSize& get_size_params (hb_tag_t tag) const
{
if (tag == HB_TAG ('s','i','z','e'))
return u.size;
return Null (FeatureParamsSize);
}
- inline const FeatureParamsStylisticSet& get_stylistic_set_params (hb_tag_t tag) const
+ const FeatureParamsStylisticSet& get_stylistic_set_params (hb_tag_t tag) const
{
if ((tag & 0xFFFF0000u) == HB_TAG ('s','s','\0','\0')) /* ssXX */
return u.stylisticSet;
return Null (FeatureParamsStylisticSet);
}
- inline const FeatureParamsCharacterVariants& get_character_variants_params (hb_tag_t tag) const
+ const FeatureParamsCharacterVariants& get_character_variants_params (hb_tag_t tag) const
{
if ((tag & 0xFFFF0000u) == HB_TAG ('c','v','\0','\0')) /* cvXX */
return u.characterVariants;
@@ -547,21 +543,21 @@ struct FeatureParams
struct Feature
{
- inline unsigned int get_lookup_count (void) const
+ unsigned int get_lookup_count () const
{ return lookupIndex.len; }
- inline hb_tag_t get_lookup_index (unsigned int i) const
+ hb_tag_t get_lookup_index (unsigned int i) const
{ return lookupIndex[i]; }
- inline unsigned int get_lookup_indexes (unsigned int start_index,
- unsigned int *lookup_count /* IN/OUT */,
- unsigned int *lookup_tags /* OUT */) const
+ unsigned int get_lookup_indexes (unsigned int start_index,
+ unsigned int *lookup_count /* IN/OUT */,
+ unsigned int *lookup_tags /* OUT */) const
{ return lookupIndex.get_indexes (start_index, lookup_count, lookup_tags); }
- inline void add_lookup_indexes_to (hb_set_t *lookup_indexes) const
+ void add_lookup_indexes_to (hb_set_t *lookup_indexes) const
{ lookupIndex.add_indexes_to (lookup_indexes); }
- inline const FeatureParams &get_feature_params (void) const
+ const FeatureParams &get_feature_params () const
{ return this+featureParams; }
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
struct Feature *out = c->serializer->embed (*this);
@@ -570,8 +566,8 @@ struct Feature
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c,
- const Record_sanitize_closure_t *closure = nullptr) const
+ bool sanitize (hb_sanitize_context_t *c,
+ const Record_sanitize_closure_t *closure = nullptr) const
{
TRACE_SANITIZE (this);
if (unlikely (!(c->check_struct (this) && lookupIndex.sanitize (c))))
@@ -650,20 +646,20 @@ namespace OT {
struct Lookup
{
- inline unsigned int get_subtable_count (void) const { return subTable.len; }
+ unsigned int get_subtable_count () const { return subTable.len; }
template <typename TSubTable>
- inline const TSubTable& get_subtable (unsigned int i) const
+ const TSubTable& get_subtable (unsigned int i) const
{ return this+CastR<OffsetArrayOf<TSubTable> > (subTable)[i]; }
template <typename TSubTable>
- inline const OffsetArrayOf<TSubTable>& get_subtables (void) const
+ const OffsetArrayOf<TSubTable>& get_subtables () const
{ return CastR<OffsetArrayOf<TSubTable> > (subTable); }
template <typename TSubTable>
- inline OffsetArrayOf<TSubTable>& get_subtables (void)
+ OffsetArrayOf<TSubTable>& get_subtables ()
{ return CastR<OffsetArrayOf<TSubTable> > (subTable); }
- inline unsigned int get_size (void) const
+ unsigned int get_size () const
{
const HBUINT16 &markFilteringSet = StructAfter<const HBUINT16> (subTable);
if (lookupFlag & LookupFlag::UseMarkFilteringSet)
@@ -671,12 +667,12 @@ struct Lookup
return (const char *) &markFilteringSet - (const char *) this;
}
- inline unsigned int get_type (void) const { return lookupType; }
+ unsigned int get_type () const { return lookupType; }
/* lookup_props is a 32-bit integer where the lower 16-bit is LookupFlag and
* higher 16-bit is mark-filtering-set if the lookup uses one.
* Not to be confused with glyph_props which is very similar. */
- inline uint32_t get_props (void) const
+ uint32_t get_props () const
{
unsigned int flag = lookupFlag;
if (unlikely (flag & LookupFlag::UseMarkFilteringSet))
@@ -688,7 +684,7 @@ struct Lookup
}
template <typename TSubTable, typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
unsigned int lookup_type = get_type ();
TRACE_DISPATCH (this, lookup_type);
@@ -701,10 +697,10 @@ struct Lookup
return_trace (c->default_return_value ());
}
- inline bool serialize (hb_serialize_context_t *c,
- unsigned int lookup_type,
- uint32_t lookup_props,
- unsigned int num_subtables)
+ bool serialize (hb_serialize_context_t *c,
+ unsigned int lookup_type,
+ uint32_t lookup_props,
+ unsigned int num_subtables)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (*this))) return_trace (false);
@@ -724,12 +720,12 @@ struct Lookup
template <typename TSubTable>
struct SubTableSubsetWrapper
{
- inline SubTableSubsetWrapper (const TSubTable &subtable_,
- unsigned int lookup_type_) :
- subtable (subtable_),
- lookup_type (lookup_type_) {}
+ SubTableSubsetWrapper (const TSubTable &subtable_,
+ unsigned int lookup_type_) :
+ subtable (subtable_),
+ lookup_type (lookup_type_) {}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{ return subtable.dispatch (c, lookup_type); }
private:
@@ -738,7 +734,7 @@ struct Lookup
};
template <typename TSubTable>
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
struct Lookup *out = c->serializer->embed (*this);
@@ -760,8 +756,16 @@ struct Lookup
return_trace (true);
}
+ /* Older compilers need this to NOT be locally defined in a function. */
+ template <typename TSubTable>
+ struct SubTableSanitizeWrapper : TSubTable
+ {
+ bool sanitize (hb_sanitize_context_t *c, unsigned int lookup_type) const
+ { return this->dispatch (c, lookup_type); }
+ };
+
template <typename TSubTable>
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!(c->check_struct (this) && subTable.sanitize (c))) return_trace (false);
@@ -771,7 +775,9 @@ struct Lookup
if (!markFilteringSet.sanitize (c)) return_trace (false);
}
- if (unlikely (!dispatch<TSubTable> (c))) return_trace (false);
+ if (unlikely (!CastR<OffsetArrayOf<SubTableSanitizeWrapper<TSubTable> > > (subTable)
+ .sanitize (c, this, get_type ())))
+ return_trace (false);
if (unlikely (get_type () == TSubTable::Extension))
{
@@ -813,34 +819,27 @@ struct CoverageFormat1
friend struct Coverage;
private:
- inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
+ unsigned int get_coverage (hb_codepoint_t glyph_id) const
{
unsigned int i;
glyphArray.bfind (glyph_id, &i, HB_BFIND_NOT_FOUND_STORE, NOT_COVERED);
return i;
}
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &glyphs,
- unsigned int num_glyphs)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
- glyphArray.len.set (num_glyphs);
- if (unlikely (!c->extend (glyphArray))) return_trace (false);
- for (unsigned int i = 0; i < num_glyphs; i++)
- glyphArray[i] = glyphs[i];
- glyphs += num_glyphs;
- return_trace (true);
+ return_trace (glyphArray.serialize (c, glyphs));
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (glyphArray.sanitize (c));
}
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
/* TODO Speed up, using hb_set_next() and bsearch()? */
unsigned int count = glyphArray.len;
@@ -849,23 +848,24 @@ struct CoverageFormat1
return true;
return false;
}
- inline bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const
+ bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const
{ return glyphs->has (glyphArray[index]); }
template <typename set_t>
- inline bool add_coverage (set_t *glyphs) const {
+ bool add_coverage (set_t *glyphs) const
+ {
return glyphs->add_sorted_array (glyphArray.arrayZ, glyphArray.len);
}
public:
/* Older compilers need this to be public. */
struct Iter {
- inline void init (const struct CoverageFormat1 &c_) { c = &c_; i = 0; }
- inline void fini (void) {}
- inline bool more (void) { return i < c->glyphArray.len; }
- inline void next (void) { i++; }
- inline hb_codepoint_t get_glyph (void) { return c->glyphArray[i]; }
- inline unsigned int get_coverage (void) { return i; }
+ void init (const struct CoverageFormat1 &c_) { c = &c_; i = 0; }
+ void fini () {}
+ bool more () { return i < c->glyphArray.len; }
+ void next () { i++; }
+ hb_codepoint_t get_glyph () { return c->glyphArray[i]; }
+ unsigned int get_coverage () { return i; }
private:
const struct CoverageFormat1 *c;
@@ -886,7 +886,7 @@ struct CoverageFormat2
friend struct Coverage;
private:
- inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
+ unsigned int get_coverage (hb_codepoint_t glyph_id) const
{
const RangeRecord &range = rangeRecord.bsearch (glyph_id);
return likely (range.start <= range.end) ?
@@ -894,21 +894,20 @@ struct CoverageFormat2
NOT_COVERED;
}
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &glyphs,
- unsigned int num_glyphs)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (*this))) return_trace (false);
- if (unlikely (!num_glyphs))
+ if (unlikely (!glyphs.len))
{
rangeRecord.len.set (0);
return_trace (true);
}
unsigned int num_ranges = 1;
- for (unsigned int i = 1; i < num_glyphs; i++)
+ for (unsigned int i = 1; i < glyphs.len; i++)
if (glyphs[i - 1] + 1 != glyphs[i])
num_ranges++;
rangeRecord.len.set (num_ranges);
@@ -917,26 +916,26 @@ struct CoverageFormat2
unsigned int range = 0;
rangeRecord[range].start = glyphs[0];
rangeRecord[range].value.set (0);
- for (unsigned int i = 1; i < num_glyphs; i++)
- if (glyphs[i - 1] + 1 != glyphs[i]) {
+ for (unsigned int i = 1; i < glyphs.len; i++)
+ {
+ if (glyphs[i - 1] + 1 != glyphs[i])
+ {
range++;
rangeRecord[range].start = glyphs[i];
rangeRecord[range].value.set (i);
- rangeRecord[range].end = glyphs[i];
- } else {
- rangeRecord[range].end = glyphs[i];
}
- glyphs += num_glyphs;
+ rangeRecord[range].end = glyphs[i];
+ }
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (rangeRecord.sanitize (c));
}
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
/* TODO Speed up, using hb_set_next() and bsearch()? */
unsigned int count = rangeRecord.len;
@@ -945,7 +944,7 @@ struct CoverageFormat2
return true;
return false;
}
- inline bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const
+ bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const
{
unsigned int i;
unsigned int count = rangeRecord.len;
@@ -962,7 +961,8 @@ struct CoverageFormat2
}
template <typename set_t>
- inline bool add_coverage (set_t *glyphs) const {
+ bool add_coverage (set_t *glyphs) const
+ {
unsigned int count = rangeRecord.len;
for (unsigned int i = 0; i < count; i++)
if (unlikely (!rangeRecord[i].add_coverage (glyphs)))
@@ -974,7 +974,7 @@ struct CoverageFormat2
/* Older compilers need this to be public. */
struct Iter
{
- inline void init (const CoverageFormat2 &c_)
+ void init (const CoverageFormat2 &c_)
{
c = &c_;
coverage = 0;
@@ -986,9 +986,9 @@ struct CoverageFormat2
i = c->rangeRecord.len;
}
}
- inline void fini (void) {}
- inline bool more (void) { return i < c->rangeRecord.len; }
- inline void next (void)
+ void fini () {}
+ bool more () { return i < c->rangeRecord.len; }
+ void next ()
{
if (j >= c->rangeRecord[i].end)
{
@@ -1010,8 +1010,8 @@ struct CoverageFormat2
coverage++;
j++;
}
- inline hb_codepoint_t get_glyph (void) { return j; }
- inline unsigned int get_coverage (void) { return coverage; }
+ hb_codepoint_t get_glyph () { return j; }
+ unsigned int get_coverage () { return coverage; }
private:
const struct CoverageFormat2 *c;
@@ -1032,7 +1032,7 @@ struct CoverageFormat2
struct Coverage
{
- inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
+ unsigned int get_coverage (hb_codepoint_t glyph_id) const
{
switch (u.format) {
case 1: return u.format1.get_coverage (glyph_id);
@@ -1041,26 +1041,27 @@ struct Coverage
}
}
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &glyphs,
- unsigned int num_glyphs)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (*this))) return_trace (false);
+
unsigned int num_ranges = 1;
- for (unsigned int i = 1; i < num_glyphs; i++)
+ for (unsigned int i = 1; i < glyphs.len; i++)
if (glyphs[i - 1] + 1 != glyphs[i])
num_ranges++;
- u.format.set (num_glyphs * 2 < num_ranges * 3 ? 1 : 2);
+ u.format.set (glyphs.len * 2 < num_ranges * 3 ? 1 : 2);
+
switch (u.format)
{
- case 1: return_trace (u.format1.serialize (c, glyphs, num_glyphs));
- case 2: return_trace (u.format2.serialize (c, glyphs, num_glyphs));
+ case 1: return_trace (u.format1.serialize (c, glyphs));
+ case 2: return_trace (u.format2.serialize (c, glyphs));
default:return_trace (false);
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return_trace (false);
@@ -1072,7 +1073,7 @@ struct Coverage
}
}
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
switch (u.format)
{
@@ -1081,7 +1082,7 @@ struct Coverage
default:return false;
}
}
- inline bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const
+ bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const
{
switch (u.format)
{
@@ -1094,7 +1095,7 @@ struct Coverage
/* Might return false if array looks unsorted.
* Used for faster rejection of corrupt data. */
template <typename set_t>
- inline bool add_coverage (set_t *glyphs) const
+ bool add_coverage (set_t *glyphs) const
{
switch (u.format)
{
@@ -1106,7 +1107,7 @@ struct Coverage
struct Iter
{
- inline Iter (const Coverage &c_)
+ Iter (const Coverage &c_)
{
memset (this, 0, sizeof (*this));
format = c_.u.format;
@@ -1117,7 +1118,7 @@ struct Coverage
default: return;
}
}
- inline bool more (void)
+ bool more ()
{
switch (format)
{
@@ -1126,7 +1127,7 @@ struct Coverage
default:return false;
}
}
- inline void next (void)
+ void next ()
{
switch (format)
{
@@ -1135,7 +1136,7 @@ struct Coverage
default: break;
}
}
- inline hb_codepoint_t get_glyph (void)
+ hb_codepoint_t get_glyph ()
{
switch (format)
{
@@ -1144,7 +1145,7 @@ struct Coverage
default:return 0;
}
}
- inline unsigned int get_coverage (void)
+ unsigned int get_coverage ()
{
switch (format)
{
@@ -1177,24 +1178,79 @@ struct Coverage
* Class Definition Table
*/
+static inline void ClassDef_serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs,
+ hb_array_t<const HBUINT16> klasses);
+
struct ClassDefFormat1
{
friend struct ClassDef;
private:
- inline unsigned int get_class (hb_codepoint_t glyph_id) const
+ unsigned int get_class (hb_codepoint_t glyph_id) const
{
return classValue[(unsigned int) (glyph_id - startGlyph)];
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const HBUINT16> glyphs,
+ hb_array_t<const HBUINT16> klasses)
+ {
+ TRACE_SERIALIZE (this);
+ if (unlikely (!c->extend_min (*this))) return_trace (false);
+
+ if (unlikely (!glyphs.len))
+ {
+ startGlyph.set (0);
+ classValue.len.set (0);
+ return_trace (true);
+ }
+
+ hb_codepoint_t glyph_min = glyphs[0];
+ hb_codepoint_t glyph_max = glyphs[glyphs.len - 1];
+
+ startGlyph.set (glyph_min);
+ classValue.len.set (glyph_max - glyph_min + 1);
+ if (unlikely (!c->extend (classValue))) return_trace (false);
+
+ for (unsigned int i = 0; i < glyphs.len; i++)
+ classValue[glyphs[i] - glyph_min] = klasses[i];
+
+ return_trace (true);
+ }
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ const hb_set_t &glyphset = *c->plan->glyphset;
+ const hb_map_t &glyph_map = *c->plan->glyph_map;
+ hb_vector_t<GlyphID> glyphs;
+ hb_vector_t<HBUINT16> klasses;
+
+ hb_codepoint_t start = startGlyph;
+ hb_codepoint_t end = start + classValue.len;
+ for (hb_codepoint_t g = start; g < end; g++)
+ {
+ unsigned int value = classValue[g - start];
+ if (!value) continue;
+ if (!glyphset.has (g)) continue;
+ glyphs.push()->set (glyph_map[g]);
+ klasses.push()->set (value);
+ }
+ c->serializer->propagate_error (glyphs, klasses);
+ ClassDef_serialize (c->serializer, glyphs, klasses);
+ return_trace (glyphs.len);
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && classValue.sanitize (c));
}
template <typename set_t>
- inline bool add_coverage (set_t *glyphs) const {
+ bool add_coverage (set_t *glyphs) const
+ {
unsigned int start = 0;
unsigned int count = classValue.len;
for (unsigned int i = 0; i < count; i++)
@@ -1216,14 +1272,15 @@ struct ClassDefFormat1
}
template <typename set_t>
- inline bool add_class (set_t *glyphs, unsigned int klass) const {
+ bool add_class (set_t *glyphs, unsigned int klass) const
+ {
unsigned int count = classValue.len;
for (unsigned int i = 0; i < count; i++)
if (classValue[i] == klass) glyphs->add (startGlyph + i);
return true;
}
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
/* TODO Speed up, using hb_set_next()? */
hb_codepoint_t start = startGlyph;
@@ -1233,7 +1290,8 @@ struct ClassDefFormat1
if (classValue[iter - start]) return true;
return false;
}
- inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const {
+ bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const
+ {
unsigned int count = classValue.len;
if (klass == 0)
{
@@ -1265,19 +1323,84 @@ struct ClassDefFormat2
friend struct ClassDef;
private:
- inline unsigned int get_class (hb_codepoint_t glyph_id) const
+ unsigned int get_class (hb_codepoint_t glyph_id) const
{
return rangeRecord.bsearch (glyph_id).value;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const HBUINT16> glyphs,
+ hb_array_t<const HBUINT16> klasses)
+ {
+ TRACE_SERIALIZE (this);
+ if (unlikely (!c->extend_min (*this))) return_trace (false);
+
+ if (unlikely (!glyphs.len))
+ {
+ rangeRecord.len.set (0);
+ return_trace (true);
+ }
+
+ unsigned int num_ranges = 1;
+ for (unsigned int i = 1; i < glyphs.len; i++)
+ if (glyphs[i - 1] + 1 != glyphs[i] ||
+ klasses[i - 1] != klasses[i])
+ num_ranges++;
+ rangeRecord.len.set (num_ranges);
+ if (unlikely (!c->extend (rangeRecord))) return_trace (false);
+
+ unsigned int range = 0;
+ rangeRecord[range].start = glyphs[0];
+ rangeRecord[range].value.set (klasses[0]);
+ for (unsigned int i = 1; i < glyphs.len; i++)
+ {
+ if (glyphs[i - 1] + 1 != glyphs[i] ||
+ klasses[i - 1] != klasses[i])
+ {
+ range++;
+ rangeRecord[range].start = glyphs[i];
+ rangeRecord[range].value = klasses[i];
+ }
+ rangeRecord[range].end = glyphs[i];
+ }
+ return_trace (true);
+ }
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ const hb_set_t &glyphset = *c->plan->glyphset;
+ const hb_map_t &glyph_map = *c->plan->glyph_map;
+ hb_vector_t<GlyphID> glyphs;
+ hb_vector_t<HBUINT16> klasses;
+
+ unsigned int count = rangeRecord.len;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ unsigned int value = rangeRecord[i].value;
+ if (!value) continue;
+ hb_codepoint_t start = rangeRecord[i].start;
+ hb_codepoint_t end = rangeRecord[i].end + 1;
+ for (hb_codepoint_t g = start; g < end; g++)
+ {
+ if (!glyphset.has (g)) continue;
+ glyphs.push ()->set (glyph_map[g]);
+ klasses.push ()->set (value);
+ }
+ }
+ c->serializer->propagate_error (glyphs, klasses);
+ ClassDef_serialize (c->serializer, glyphs, klasses);
+ return_trace (glyphs.len);
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (rangeRecord.sanitize (c));
}
template <typename set_t>
- inline bool add_coverage (set_t *glyphs) const
+ bool add_coverage (set_t *glyphs) const
{
unsigned int count = rangeRecord.len;
for (unsigned int i = 0; i < count; i++)
@@ -1288,7 +1411,7 @@ struct ClassDefFormat2
}
template <typename set_t>
- inline bool add_class (set_t *glyphs, unsigned int klass) const
+ bool add_class (set_t *glyphs, unsigned int klass) const
{
unsigned int count = rangeRecord.len;
for (unsigned int i = 0; i < count; i++)
@@ -1300,7 +1423,7 @@ struct ClassDefFormat2
return true;
}
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
/* TODO Speed up, using hb_set_next() and bsearch()? */
unsigned int count = rangeRecord.len;
@@ -1309,7 +1432,7 @@ struct ClassDefFormat2
return true;
return false;
}
- inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const
+ bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const
{
unsigned int count = rangeRecord.len;
if (klass == 0)
@@ -1345,7 +1468,7 @@ struct ClassDefFormat2
struct ClassDef
{
- inline unsigned int get_class (hb_codepoint_t glyph_id) const
+ unsigned int get_class (hb_codepoint_t glyph_id) const
{
switch (u.format) {
case 1: return u.format1.get_class (glyph_id);
@@ -1354,7 +1477,49 @@ struct ClassDef
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs,
+ hb_array_t<const HBUINT16> klasses)
+ {
+ TRACE_SERIALIZE (this);
+ if (unlikely (!c->extend_min (*this))) return_trace (false);
+
+ unsigned int format = 2;
+ if (glyphs.len)
+ {
+ hb_codepoint_t glyph_min = glyphs[0];
+ hb_codepoint_t glyph_max = glyphs[glyphs.len - 1];
+
+ unsigned int num_ranges = 1;
+ for (unsigned int i = 1; i < glyphs.len; i++)
+ if (glyphs[i - 1] + 1 != glyphs[i] ||
+ klasses[i - 1] != klasses[i])
+ num_ranges++;
+
+ if (1 + (glyph_max - glyph_min + 1) < num_ranges * 3)
+ format = 1;
+ }
+ u.format.set (format);
+
+ switch (u.format)
+ {
+ case 1: return_trace (u.format1.serialize (c, glyphs, klasses));
+ case 2: return_trace (u.format2.serialize (c, glyphs, klasses));
+ default:return_trace (false);
+ }
+ }
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ switch (u.format) {
+ case 1: return_trace (u.format1.subset (c));
+ case 2: return_trace (u.format2.subset (c));
+ default:return_trace (false);
+ }
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return_trace (false);
@@ -1368,7 +1533,8 @@ struct ClassDef
/* Might return false if array looks unsorted.
* Used for faster rejection of corrupt data. */
template <typename set_t>
- inline bool add_coverage (set_t *glyphs) const {
+ bool add_coverage (set_t *glyphs) const
+ {
switch (u.format) {
case 1: return u.format1.add_coverage (glyphs);
case 2: return u.format2.add_coverage (glyphs);
@@ -1379,7 +1545,8 @@ struct ClassDef
/* Might return false if array looks unsorted.
* Used for faster rejection of corrupt data. */
template <typename set_t>
- inline bool add_class (set_t *glyphs, unsigned int klass) const {
+ bool add_class (set_t *glyphs, unsigned int klass) const
+ {
switch (u.format) {
case 1: return u.format1.add_class (glyphs, klass);
case 2: return u.format2.add_class (glyphs, klass);
@@ -1387,14 +1554,16 @@ struct ClassDef
}
}
- inline bool intersects (const hb_set_t *glyphs) const {
+ bool intersects (const hb_set_t *glyphs) const
+ {
switch (u.format) {
case 1: return u.format1.intersects (glyphs);
case 2: return u.format2.intersects (glyphs);
default:return false;
}
}
- inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const {
+ bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const
+ {
switch (u.format) {
case 1: return u.format1.intersects_class (glyphs, klass);
case 2: return u.format2.intersects_class (glyphs, klass);
@@ -1412,6 +1581,11 @@ struct ClassDef
DEFINE_SIZE_UNION (2, format);
};
+static inline void ClassDef_serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs,
+ hb_array_t<const HBUINT16> klasses)
+{ c->start_embed<ClassDef> ()->serialize (c, glyphs, klasses); }
+
/*
* Item Variation Store
@@ -1419,7 +1593,7 @@ struct ClassDef
struct VarRegionAxis
{
- inline float evaluate (int coord) const
+ float evaluate (int coord) const
{
int start = startCoord, peak = peakCoord, end = endCoord;
@@ -1442,7 +1616,7 @@ struct VarRegionAxis
return float (end - coord) / (end - peak);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -1460,7 +1634,7 @@ struct VarRegionAxis
struct VarRegionList
{
- inline float evaluate (unsigned int region_index,
+ float evaluate (unsigned int region_index,
const int *coords, unsigned int coord_len) const
{
if (unlikely (region_index >= regionCount))
@@ -1481,13 +1655,15 @@ struct VarRegionList
return v;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
axesZ.sanitize (c, (unsigned int) axisCount * (unsigned int) regionCount));
}
+ unsigned int get_region_count () const { return regionCount; }
+
protected:
HBUINT16 axisCount;
HBUINT16 regionCount;
@@ -1499,13 +1675,16 @@ struct VarRegionList
struct VarData
{
- inline unsigned int get_row_size (void) const
+ unsigned int get_region_index_count () const
+ { return regionIndices.len; }
+
+ unsigned int get_row_size () const
{ return shortCount + regionIndices.len; }
- inline unsigned int get_size (void) const
+ unsigned int get_size () const
{ return itemCount * get_row_size (); }
- inline float get_delta (unsigned int inner,
+ float get_delta (unsigned int inner,
const int *coords, unsigned int coord_count,
const VarRegionList &regions) const
{
@@ -1537,7 +1716,19 @@ struct VarData
return delta;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ void get_scalars (int *coords, unsigned int coord_count,
+ const VarRegionList &regions,
+ float *scalars /*OUT */,
+ unsigned int num_scalars) const
+ {
+ assert (num_scalars == regionIndices.len);
+ for (unsigned int i = 0; i < num_scalars; i++)
+ {
+ scalars[i] = regions.evaluate (regionIndices.arrayZ[i], coords, coord_count);
+ }
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -1559,8 +1750,8 @@ struct VarData
struct VariationStore
{
- inline float get_delta (unsigned int outer, unsigned int inner,
- const int *coords, unsigned int coord_count) const
+ float get_delta (unsigned int outer, unsigned int inner,
+ const int *coords, unsigned int coord_count) const
{
if (unlikely (outer >= dataSets.len))
return 0.;
@@ -1570,15 +1761,15 @@ struct VariationStore
this+regions);
}
- inline float get_delta (unsigned int index,
- const int *coords, unsigned int coord_count) const
+ float get_delta (unsigned int index,
+ const int *coords, unsigned int coord_count) const
{
unsigned int outer = index >> 16;
unsigned int inner = index & 0xFFFF;
return get_delta (outer, inner, coords, coord_count);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -1587,6 +1778,18 @@ struct VariationStore
dataSets.sanitize (c, this));
}
+ unsigned int get_region_index_count (unsigned int ivs) const
+ { return (this+dataSets[ivs]).get_region_index_count (); }
+
+ void get_scalars (unsigned int ivs,
+ int *coords, unsigned int coord_count,
+ float *scalars /*OUT*/,
+ unsigned int num_scalars) const
+ {
+ (this+dataSets[ivs]).get_scalars (coords, coord_count, this+regions,
+ &scalars[0], num_scalars);
+ }
+
protected:
HBUINT16 format;
LOffsetTo<VarRegionList> regions;
@@ -1604,13 +1807,13 @@ struct ConditionFormat1
friend struct Condition;
private:
- inline bool evaluate (const int *coords, unsigned int coord_len) const
+ bool evaluate (const int *coords, unsigned int coord_len) const
{
int coord = axisIndex < coord_len ? coords[axisIndex] : 0;
return filterRangeMinValue <= coord && coord <= filterRangeMaxValue;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -1627,7 +1830,7 @@ struct ConditionFormat1
struct Condition
{
- inline bool evaluate (const int *coords, unsigned int coord_len) const
+ bool evaluate (const int *coords, unsigned int coord_len) const
{
switch (u.format) {
case 1: return u.format1.evaluate (coords, coord_len);
@@ -1635,7 +1838,7 @@ struct Condition
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return_trace (false);
@@ -1656,7 +1859,7 @@ struct Condition
struct ConditionSet
{
- inline bool evaluate (const int *coords, unsigned int coord_len) const
+ bool evaluate (const int *coords, unsigned int coord_len) const
{
unsigned int count = conditions.len;
for (unsigned int i = 0; i < count; i++)
@@ -1665,7 +1868,7 @@ struct ConditionSet
return true;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (conditions.sanitize (c, this));
@@ -1681,7 +1884,7 @@ struct FeatureTableSubstitutionRecord
{
friend struct FeatureTableSubstitution;
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && feature.sanitize (c, base));
@@ -1696,7 +1899,7 @@ struct FeatureTableSubstitutionRecord
struct FeatureTableSubstitution
{
- inline const Feature *find_substitute (unsigned int feature_index) const
+ const Feature *find_substitute (unsigned int feature_index) const
{
unsigned int count = substitutions.len;
for (unsigned int i = 0; i < count; i++)
@@ -1708,7 +1911,7 @@ struct FeatureTableSubstitution
return nullptr;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (version.sanitize (c) &&
@@ -1728,7 +1931,7 @@ struct FeatureVariationRecord
{
friend struct FeatureVariations;
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (conditions.sanitize (c, base) &&
@@ -1748,7 +1951,7 @@ struct FeatureVariations
{
enum { NOT_FOUND_INDEX = 0xFFFFFFFFu };
- inline bool find_index (const int *coords, unsigned int coord_len,
+ bool find_index (const int *coords, unsigned int coord_len,
unsigned int *index) const
{
unsigned int count = varRecords.len;
@@ -1765,20 +1968,20 @@ struct FeatureVariations
return false;
}
- inline const Feature *find_substitute (unsigned int variations_index,
- unsigned int feature_index) const
+ const Feature *find_substitute (unsigned int variations_index,
+ unsigned int feature_index) const
{
const FeatureVariationRecord &record = varRecords[variations_index];
return (this+record.substitutions).find_substitute (feature_index);
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
return_trace (c->serializer->embed (*this));
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (version.sanitize (c) &&
@@ -1805,20 +2008,20 @@ struct HintingDevice
private:
- inline hb_position_t get_x_delta (hb_font_t *font) const
+ hb_position_t get_x_delta (hb_font_t *font) const
{ return get_delta (font->x_ppem, font->x_scale); }
- inline hb_position_t get_y_delta (hb_font_t *font) const
+ hb_position_t get_y_delta (hb_font_t *font) const
{ return get_delta (font->y_ppem, font->y_scale); }
- inline unsigned int get_size (void) const
+ unsigned int get_size () const
{
unsigned int f = deltaFormat;
if (unlikely (f < 1 || f > 3 || startSize > endSize)) return 3 * HBUINT16::static_size;
return HBUINT16::static_size * (4 + ((endSize - startSize) >> (4 - f)));
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && c->check_range (this, this->get_size ()));
@@ -1826,7 +2029,7 @@ struct HintingDevice
private:
- inline int get_delta (unsigned int ppem, int scale) const
+ int get_delta (unsigned int ppem, int scale) const
{
if (!ppem) return 0;
@@ -1836,7 +2039,7 @@ struct HintingDevice
return (int) (pixels * (int64_t) scale / ppem);
}
- inline int get_delta_pixels (unsigned int ppem_size) const
+ int get_delta_pixels (unsigned int ppem_size) const
{
unsigned int f = deltaFormat;
if (unlikely (f < 1 || f > 3))
@@ -1879,13 +2082,13 @@ struct VariationDevice
private:
- inline hb_position_t get_x_delta (hb_font_t *font, const VariationStore &store) const
+ hb_position_t get_x_delta (hb_font_t *font, const VariationStore &store) const
{ return font->em_scalef_x (get_delta (font, store)); }
- inline hb_position_t get_y_delta (hb_font_t *font, const VariationStore &store) const
+ hb_position_t get_y_delta (hb_font_t *font, const VariationStore &store) const
{ return font->em_scalef_y (get_delta (font, store)); }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -1893,7 +2096,7 @@ struct VariationDevice
private:
- inline float get_delta (hb_font_t *font, const VariationStore &store) const
+ float get_delta (hb_font_t *font, const VariationStore &store) const
{
return store.get_delta (outerIndex, innerIndex, font->coords, font->num_coords);
}
@@ -1919,7 +2122,7 @@ struct DeviceHeader
struct Device
{
- inline hb_position_t get_x_delta (hb_font_t *font, const VariationStore &store=Null (VariationStore)) const
+ hb_position_t get_x_delta (hb_font_t *font, const VariationStore &store=Null (VariationStore)) const
{
switch (u.b.format)
{
@@ -1931,7 +2134,7 @@ struct Device
return 0;
}
}
- inline hb_position_t get_y_delta (hb_font_t *font, const VariationStore &store=Null (VariationStore)) const
+ hb_position_t get_y_delta (hb_font_t *font, const VariationStore &store=Null (VariationStore)) const
{
switch (u.b.format)
{
@@ -1944,7 +2147,7 @@ struct Device
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!u.b.format.sanitize (c)) return_trace (false);
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 a0ae27e75cb..3099fb96a80 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
@@ -46,10 +46,10 @@ typedef ArrayOf<HBUINT16> AttachPoint; /* Array of contour point indices--in
struct AttachList
{
- inline unsigned int get_attach_points (hb_codepoint_t glyph_id,
- unsigned int start_offset,
- unsigned int *point_count /* IN/OUT */,
- unsigned int *point_array /* OUT */) const
+ unsigned int get_attach_points (hb_codepoint_t glyph_id,
+ unsigned int start_offset,
+ unsigned int *point_count /* IN/OUT */,
+ unsigned int *point_array /* OUT */) const
{
unsigned int index = (this+coverage).get_coverage (glyph_id);
if (index == NOT_COVERED)
@@ -72,7 +72,7 @@ struct AttachList
return points.len;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (coverage.sanitize (c, this) && attachPoint.sanitize (c, this));
@@ -98,12 +98,12 @@ struct CaretValueFormat1
friend struct CaretValue;
private:
- inline hb_position_t get_caret_value (hb_font_t *font, hb_direction_t direction) const
+ hb_position_t get_caret_value (hb_font_t *font, hb_direction_t direction) const
{
return HB_DIRECTION_IS_HORIZONTAL (direction) ? font->em_scale_x (coordinate) : font->em_scale_y (coordinate);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -121,14 +121,14 @@ struct CaretValueFormat2
friend struct CaretValue;
private:
- inline hb_position_t get_caret_value (hb_font_t *font, hb_direction_t direction, hb_codepoint_t glyph_id) const
+ hb_position_t get_caret_value (hb_font_t *font, hb_direction_t direction, hb_codepoint_t glyph_id) const
{
hb_position_t x, y;
font->get_glyph_contour_point_for_origin (glyph_id, caretValuePoint, direction, &x, &y);
return HB_DIRECTION_IS_HORIZONTAL (direction) ? x : y;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -145,14 +145,15 @@ struct CaretValueFormat3
{
friend struct CaretValue;
- inline hb_position_t get_caret_value (hb_font_t *font, hb_direction_t direction, const VariationStore &var_store) const
+ hb_position_t get_caret_value (hb_font_t *font, hb_direction_t direction,
+ const VariationStore &var_store) const
{
return HB_DIRECTION_IS_HORIZONTAL (direction) ?
font->em_scale_x (coordinate) + (this+deviceTable).get_x_delta (font, var_store) :
font->em_scale_y (coordinate) + (this+deviceTable).get_y_delta (font, var_store);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && deviceTable.sanitize (c, this));
@@ -171,7 +172,7 @@ struct CaretValueFormat3
struct CaretValue
{
- inline hb_position_t get_caret_value (hb_font_t *font,
+ hb_position_t get_caret_value (hb_font_t *font,
hb_direction_t direction,
hb_codepoint_t glyph_id,
const VariationStore &var_store) const
@@ -184,7 +185,7 @@ struct CaretValue
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return_trace (false);
@@ -209,13 +210,13 @@ struct CaretValue
struct LigGlyph
{
- inline unsigned int get_lig_carets (hb_font_t *font,
- hb_direction_t direction,
- hb_codepoint_t glyph_id,
- const VariationStore &var_store,
- unsigned int start_offset,
- unsigned int *caret_count /* IN/OUT */,
- hb_position_t *caret_array /* OUT */) const
+ unsigned int get_lig_carets (hb_font_t *font,
+ hb_direction_t direction,
+ hb_codepoint_t glyph_id,
+ const VariationStore &var_store,
+ unsigned int start_offset,
+ unsigned int *caret_count /* IN/OUT */,
+ hb_position_t *caret_array /* OUT */) const
{
if (caret_count)
{
@@ -228,7 +229,7 @@ struct LigGlyph
return carets.len;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (carets.sanitize (c, this));
@@ -245,13 +246,13 @@ struct LigGlyph
struct LigCaretList
{
- inline unsigned int get_lig_carets (hb_font_t *font,
- hb_direction_t direction,
- hb_codepoint_t glyph_id,
- const VariationStore &var_store,
- unsigned int start_offset,
- unsigned int *caret_count /* IN/OUT */,
- hb_position_t *caret_array /* OUT */) const
+ unsigned int get_lig_carets (hb_font_t *font,
+ hb_direction_t direction,
+ hb_codepoint_t glyph_id,
+ const VariationStore &var_store,
+ unsigned int start_offset,
+ unsigned int *caret_count /* IN/OUT */,
+ hb_position_t *caret_array /* OUT */) const
{
unsigned int index = (this+coverage).get_coverage (glyph_id);
if (index == NOT_COVERED)
@@ -264,7 +265,7 @@ struct LigCaretList
return lig_glyph.get_lig_carets (font, direction, glyph_id, var_store, start_offset, caret_count, caret_array);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (coverage.sanitize (c, this) && ligGlyph.sanitize (c, this));
@@ -284,10 +285,10 @@ struct LigCaretList
struct MarkGlyphSetsFormat1
{
- inline bool covers (unsigned int set_index, hb_codepoint_t glyph_id) const
+ bool covers (unsigned int set_index, hb_codepoint_t glyph_id) const
{ return (this+coverage[set_index]).get_coverage (glyph_id) != NOT_COVERED; }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (coverage.sanitize (c, this));
@@ -304,7 +305,7 @@ struct MarkGlyphSetsFormat1
struct MarkGlyphSets
{
- inline bool covers (unsigned int set_index, hb_codepoint_t glyph_id) const
+ bool covers (unsigned int set_index, hb_codepoint_t glyph_id) const
{
switch (u.format) {
case 1: return u.format1.covers (set_index, glyph_id);
@@ -312,7 +313,7 @@ struct MarkGlyphSets
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return_trace (false);
@@ -340,7 +341,7 @@ struct MarkGlyphSets
struct GDEF
{
- static const hb_tag_t tableTag = HB_OT_TAG_GDEF;
+ enum { tableTag = HB_OT_TAG_GDEF };
enum GlyphClasses {
UnclassifiedGlyph = 0,
@@ -350,47 +351,47 @@ struct GDEF
ComponentGlyph = 4
};
- inline bool has_data (void) const { return version.to_int (); }
- inline bool has_glyph_classes (void) const { return glyphClassDef != 0; }
- inline unsigned int get_glyph_class (hb_codepoint_t glyph) const
+ bool has_data () const { return version.to_int (); }
+ bool has_glyph_classes () const { return glyphClassDef != 0; }
+ unsigned int get_glyph_class (hb_codepoint_t glyph) const
{ return (this+glyphClassDef).get_class (glyph); }
- inline void get_glyphs_in_class (unsigned int klass, hb_set_t *glyphs) const
+ void get_glyphs_in_class (unsigned int klass, hb_set_t *glyphs) const
{ (this+glyphClassDef).add_class (glyphs, klass); }
- inline bool has_mark_attachment_types (void) const { return markAttachClassDef != 0; }
- inline unsigned int get_mark_attachment_type (hb_codepoint_t glyph) const
+ bool has_mark_attachment_types () const { return markAttachClassDef != 0; }
+ unsigned int get_mark_attachment_type (hb_codepoint_t glyph) const
{ return (this+markAttachClassDef).get_class (glyph); }
- inline bool has_attach_points (void) const { return attachList != 0; }
- inline unsigned int get_attach_points (hb_codepoint_t glyph_id,
- unsigned int start_offset,
- unsigned int *point_count /* IN/OUT */,
- unsigned int *point_array /* OUT */) const
+ bool has_attach_points () const { return attachList != 0; }
+ unsigned int get_attach_points (hb_codepoint_t glyph_id,
+ unsigned int start_offset,
+ unsigned int *point_count /* IN/OUT */,
+ unsigned int *point_array /* OUT */) const
{ return (this+attachList).get_attach_points (glyph_id, start_offset, point_count, point_array); }
- inline bool has_lig_carets (void) const { return ligCaretList != 0; }
- inline unsigned int get_lig_carets (hb_font_t *font,
- hb_direction_t direction,
- hb_codepoint_t glyph_id,
- unsigned int start_offset,
- unsigned int *caret_count /* IN/OUT */,
- hb_position_t *caret_array /* OUT */) const
+ bool has_lig_carets () const { return ligCaretList != 0; }
+ unsigned int get_lig_carets (hb_font_t *font,
+ hb_direction_t direction,
+ hb_codepoint_t glyph_id,
+ unsigned int start_offset,
+ unsigned int *caret_count /* IN/OUT */,
+ hb_position_t *caret_array /* OUT */) const
{ return (this+ligCaretList).get_lig_carets (font,
direction, glyph_id, get_var_store(),
start_offset, caret_count, caret_array); }
- inline bool has_mark_sets (void) const { return version.to_int () >= 0x00010002u && markGlyphSetsDef != 0; }
- inline bool mark_set_covers (unsigned int set_index, hb_codepoint_t glyph_id) const
+ bool has_mark_sets () const { return version.to_int () >= 0x00010002u && markGlyphSetsDef != 0; }
+ bool mark_set_covers (unsigned int set_index, hb_codepoint_t glyph_id) const
{ return version.to_int () >= 0x00010002u && (this+markGlyphSetsDef).covers (set_index, glyph_id); }
- inline bool has_var_store (void) const { return version.to_int () >= 0x00010003u && varStore != 0; }
- inline const VariationStore &get_var_store (void) const
+ bool has_var_store () const { return version.to_int () >= 0x00010003u && varStore != 0; }
+ const VariationStore &get_var_store () const
{ return version.to_int () >= 0x00010003u ? this+varStore : Null(VariationStore); }
/* glyph_props is a 16-bit integer where the lower 8-bit have bits representing
* glyph class and other bits, and high 8-bit the mark attachment type (if any).
* Not to be confused with lookup_props which is very similar. */
- inline unsigned int get_glyph_props (hb_codepoint_t glyph) const
+ unsigned int get_glyph_props (hb_codepoint_t glyph) const
{
unsigned int klass = get_glyph_class (glyph);
@@ -413,7 +414,7 @@ struct GDEF
struct accelerator_t
{
- inline void init (hb_face_t *face)
+ void init (hb_face_t *face)
{
this->table = hb_sanitize_context_t().reference_table<GDEF> (face);
if (unlikely (this->table->is_blacklisted (this->table.get_blob (), face)))
@@ -423,22 +424,39 @@ struct GDEF
}
}
- inline void fini (void)
- {
- this->table.destroy ();
- }
+ void fini () { this->table.destroy (); }
hb_blob_ptr_t<GDEF> table;
};
- inline unsigned int get_size (void) const
+ unsigned int get_size () const
{
return min_size +
(version.to_int () >= 0x00010002u ? markGlyphSetsDef.static_size : 0) +
(version.to_int () >= 0x00010003u ? varStore.static_size : 0);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ struct GDEF *out = c->serializer->embed (*this);
+ if (unlikely (!out)) return_trace (false);
+
+ out->glyphClassDef.serialize_subset (c, this+glyphClassDef, out);
+ out->attachList.set (0);//TODO(subset) serialize_subset (c, this+attachList, out);
+ out->ligCaretList.set (0);//TODO(subset) serialize_subset (c, this+ligCaretList, out);
+ out->markAttachClassDef.serialize_subset (c, this+markAttachClassDef, out);
+
+ if (version.to_int () >= 0x00010002u)
+ out->markGlyphSetsDef.set (0);// TODO(subset) serialize_subset (c, this+markGlyphSetsDef, out);
+
+ if (version.to_int () >= 0x00010003u)
+ out->varStore.set (0);// TODO(subset) serialize_subset (c, this+varStore, out);
+
+ return_trace (true);
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (version.sanitize (c) &&
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 2589218de78..b123336109b 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
@@ -98,10 +98,8 @@ struct ValueFormat : HBUINT16
* PosTable (may be NULL) */
#endif
- inline unsigned int get_len (void) const
- { return hb_popcount ((unsigned int) *this); }
- inline unsigned int get_size (void) const
- { return get_len () * Value::static_size; }
+ unsigned int get_len () const { return hb_popcount ((unsigned int) *this); }
+ unsigned int get_size () const { return get_len () * Value::static_size; }
bool apply_value (hb_ot_apply_context_t *c,
const void *base,
@@ -158,7 +156,7 @@ struct ValueFormat : HBUINT16
}
private:
- inline bool sanitize_value_devices (hb_sanitize_context_t *c, const void *base, const Value *values) const
+ bool sanitize_value_devices (hb_sanitize_context_t *c, const void *base, const Value *values) const
{
unsigned int format = *this;
@@ -175,15 +173,15 @@ struct ValueFormat : HBUINT16
return true;
}
- static inline OffsetTo<Device>& get_device (Value* value)
+ static OffsetTo<Device>& get_device (Value* value)
{ return *CastP<OffsetTo<Device> > (value); }
- static inline const OffsetTo<Device>& get_device (const Value* value, bool *worked=nullptr)
+ static const OffsetTo<Device>& get_device (const Value* value, bool *worked=nullptr)
{
if (worked) *worked |= *value;
return *CastP<OffsetTo<Device> > (value);
}
- static inline const HBINT16& get_short (const Value* value, bool *worked=nullptr)
+ static const HBINT16& get_short (const Value* value, bool *worked=nullptr)
{
if (worked) *worked |= *value;
return *CastP<HBINT16> (value);
@@ -191,18 +189,19 @@ struct ValueFormat : HBUINT16
public:
- inline bool has_device (void) const {
+ bool has_device () const
+ {
unsigned int format = *this;
return (format & devices) != 0;
}
- inline bool sanitize_value (hb_sanitize_context_t *c, const void *base, const Value *values) const
+ bool sanitize_value (hb_sanitize_context_t *c, const void *base, const Value *values) const
{
TRACE_SANITIZE (this);
return_trace (c->check_range (values, get_size ()) && (!has_device () || sanitize_value_devices (c, base, values)));
}
- inline bool sanitize_values (hb_sanitize_context_t *c, const void *base, const Value *values, unsigned int count) const
+ bool sanitize_values (hb_sanitize_context_t *c, const void *base, const Value *values, unsigned int count) const
{
TRACE_SANITIZE (this);
unsigned int len = get_len ();
@@ -221,7 +220,7 @@ struct ValueFormat : HBUINT16
}
/* Just sanitize referenced Device tables. Doesn't check the values themselves. */
- inline bool sanitize_values_stride_unsafe (hb_sanitize_context_t *c, const void *base, const Value *values, unsigned int count, unsigned int stride) const
+ bool sanitize_values_stride_unsafe (hb_sanitize_context_t *c, const void *base, const Value *values, unsigned int count, unsigned int stride) const
{
TRACE_SANITIZE (this);
@@ -240,15 +239,15 @@ struct ValueFormat : HBUINT16
struct AnchorFormat1
{
- inline void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id HB_UNUSED,
- float *x, float *y) const
+ void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id HB_UNUSED,
+ float *x, float *y) const
{
hb_font_t *font = c->font;
*x = font->em_fscale_x (xCoordinate);
*y = font->em_fscale_y (yCoordinate);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -264,8 +263,8 @@ struct AnchorFormat1
struct AnchorFormat2
{
- inline void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id,
- float *x, float *y) const
+ void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id,
+ float *x, float *y) const
{
hb_font_t *font = c->font;
unsigned int x_ppem = font->x_ppem;
@@ -279,7 +278,7 @@ struct AnchorFormat2
*y = ret && y_ppem ? cy : font->em_fscale_y (yCoordinate);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -296,8 +295,8 @@ struct AnchorFormat2
struct AnchorFormat3
{
- inline void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id HB_UNUSED,
- float *x, float *y) const
+ void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id HB_UNUSED,
+ float *x, float *y) const
{
hb_font_t *font = c->font;
*x = font->em_fscale_x (xCoordinate);
@@ -309,7 +308,7 @@ struct AnchorFormat3
*y += (this+yDeviceTable).get_y_delta (font, c->var_store);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && xDeviceTable.sanitize (c, this) && yDeviceTable.sanitize (c, this));
@@ -333,8 +332,8 @@ struct AnchorFormat3
struct Anchor
{
- inline void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id,
- float *x, float *y) const
+ void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id,
+ float *x, float *y) const
{
*x = *y = 0;
switch (u.format) {
@@ -345,7 +344,7 @@ struct Anchor
}
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return_trace (false);
@@ -371,14 +370,16 @@ struct Anchor
struct AnchorMatrix
{
- inline const Anchor& get_anchor (unsigned int row, unsigned int col, unsigned int cols, bool *found) const {
+ const Anchor& get_anchor (unsigned int row, unsigned int col,
+ unsigned int cols, bool *found) const
+ {
*found = false;
if (unlikely (row >= rows || col >= cols)) return Null(Anchor);
*found = !matrixZ[row * cols + col].is_null ();
return this+matrixZ[row * cols + col];
}
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int cols) const
+ bool sanitize (hb_sanitize_context_t *c, unsigned int cols) const
{
TRACE_SANITIZE (this);
if (!c->check_struct (this)) return_trace (false);
@@ -404,7 +405,7 @@ struct MarkRecord
{
friend struct MarkArray;
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && markAnchor.sanitize (c, base));
@@ -421,10 +422,10 @@ struct MarkRecord
struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage order */
{
- inline bool apply (hb_ot_apply_context_t *c,
- unsigned int mark_index, unsigned int glyph_index,
- const AnchorMatrix &anchors, unsigned int class_count,
- unsigned int glyph_pos) const
+ bool apply (hb_ot_apply_context_t *c,
+ unsigned int mark_index, unsigned int glyph_index,
+ const AnchorMatrix &anchors, unsigned int class_count,
+ unsigned int glyph_pos) const
{
TRACE_APPLY (this);
hb_buffer_t *buffer = c->buffer;
@@ -455,7 +456,7 @@ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage orde
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (ArrayOf<MarkRecord>::sanitize (c, this));
@@ -467,19 +468,18 @@ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage orde
struct SinglePosFormat1
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{ return (this+coverage).intersects (glyphs); }
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
if (unlikely (!(this+coverage).add_coverage (c->input))) return;
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
hb_buffer_t *buffer = c->buffer;
@@ -492,14 +492,14 @@ struct SinglePosFormat1
return_trace (true);
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -523,19 +523,18 @@ struct SinglePosFormat1
struct SinglePosFormat2
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{ return (this+coverage).intersects (glyphs); }
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
if (unlikely (!(this+coverage).add_coverage (c->input))) return;
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
hb_buffer_t *buffer = c->buffer;
@@ -552,14 +551,14 @@ struct SinglePosFormat2
return_trace (true);
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -584,7 +583,7 @@ struct SinglePosFormat2
struct SinglePos
{
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
@@ -622,7 +621,7 @@ struct PairSet
{
friend struct PairPosFormat1;
- inline bool intersects (const hb_set_t *glyphs,
+ bool intersects (const hb_set_t *glyphs,
const ValueFormat *valueFormats) const
{
unsigned int len1 = valueFormats[0].get_len ();
@@ -640,7 +639,7 @@ struct PairSet
return false;
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c,
+ void collect_glyphs (hb_collect_glyphs_context_t *c,
const ValueFormat *valueFormats) const
{
TRACE_COLLECT_GLYPHS (this);
@@ -652,7 +651,7 @@ struct PairSet
c->input->add_array (&record->secondGlyph, len, record_size);
}
- inline bool apply (hb_ot_apply_context_t *c,
+ bool apply (hb_ot_apply_context_t *c,
const ValueFormat *valueFormats,
unsigned int pos) const
{
@@ -702,7 +701,7 @@ struct PairSet
unsigned int stride; /* 1 + len1 + len2 */
};
- inline bool sanitize (hb_sanitize_context_t *c, const sanitize_closure_t *closure) const
+ bool sanitize (hb_sanitize_context_t *c, const sanitize_closure_t *closure) const
{
TRACE_SANITIZE (this);
if (!(c->check_struct (this)
@@ -728,7 +727,7 @@ struct PairSet
struct PairPosFormat1
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
unsigned int count = pairSet.len;
for (Coverage::Iter iter (this+coverage); iter.more (); iter.next ())
@@ -742,7 +741,7 @@ struct PairPosFormat1
return false;
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
if (unlikely (!(this+coverage).add_coverage (c->input))) return;
@@ -751,10 +750,9 @@ struct PairPosFormat1
(this+pairSet[i]).collect_glyphs (c, valueFormat);
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
hb_buffer_t *buffer = c->buffer;
@@ -768,14 +766,14 @@ struct PairPosFormat1
return_trace ((this+pairSet[index]).apply (c, valueFormat, skippy_iter.idx));
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -814,23 +812,22 @@ struct PairPosFormat1
struct PairPosFormat2
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
return (this+coverage).intersects (glyphs) &&
(this+classDef2).intersects (glyphs);
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
if (unlikely (!(this+coverage).add_coverage (c->input))) return;
if (unlikely (!(this+classDef2).add_coverage (c->input))) return;
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
hb_buffer_t *buffer = c->buffer;
@@ -862,14 +859,14 @@ struct PairPosFormat2
return_trace (true);
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!(c->check_struct (this)
@@ -922,7 +919,7 @@ struct PairPosFormat2
struct PairPos
{
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
@@ -946,7 +943,7 @@ struct EntryExitRecord
{
friend struct CursivePosFormat1;
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (entryAnchor.sanitize (c, base) && exitAnchor.sanitize (c, base));
@@ -970,19 +967,18 @@ reverse_cursive_minor_offset (hb_glyph_position_t *pos, unsigned int i, hb_direc
struct CursivePosFormat1
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{ return (this+coverage).intersects (glyphs); }
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
if (unlikely (!(this+coverage).add_coverage (c->input))) return;
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
hb_buffer_t *buffer = c->buffer;
@@ -1083,14 +1079,14 @@ struct CursivePosFormat1
return_trace (true);
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (coverage.sanitize (c, this) && entryExitRecord.sanitize (c, this));
@@ -1111,7 +1107,7 @@ struct CursivePosFormat1
struct CursivePos
{
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
@@ -1136,21 +1132,20 @@ typedef AnchorMatrix BaseArray; /* base-major--
struct MarkBasePosFormat1
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{ return (this+markCoverage).intersects (glyphs) &&
(this+baseCoverage).intersects (glyphs); }
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
if (unlikely (!(this+markCoverage).add_coverage (c->input))) return;
if (unlikely (!(this+baseCoverage).add_coverage (c->input))) return;
}
- inline const Coverage &get_coverage (void) const
- { return this+markCoverage; }
+ const Coverage &get_coverage () const { return this+markCoverage; }
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
hb_buffer_t *buffer = c->buffer;
@@ -1190,14 +1185,14 @@ struct MarkBasePosFormat1
return_trace ((this+markArray).apply (c, mark_index, base_index, this+baseArray, classCount, skippy_iter.idx));
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -1229,7 +1224,7 @@ struct MarkBasePosFormat1
struct MarkBasePos
{
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
@@ -1259,21 +1254,20 @@ typedef OffsetListOf<LigatureAttach> LigatureArray;
struct MarkLigPosFormat1
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{ return (this+markCoverage).intersects (glyphs) &&
(this+ligatureCoverage).intersects (glyphs); }
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
if (unlikely (!(this+markCoverage).add_coverage (c->input))) return;
if (unlikely (!(this+ligatureCoverage).add_coverage (c->input))) return;
}
- inline const Coverage &get_coverage (void) const
- { return this+markCoverage; }
+ const Coverage &get_coverage () const { return this+markCoverage; }
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
hb_buffer_t *buffer = c->buffer;
@@ -1316,14 +1310,14 @@ struct MarkLigPosFormat1
return_trace ((this+markArray).apply (c, mark_index, comp_index, lig_attach, classCount, j));
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -1356,7 +1350,7 @@ struct MarkLigPosFormat1
struct MarkLigPos
{
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
@@ -1381,21 +1375,20 @@ typedef AnchorMatrix Mark2Array; /* mark2-major--
struct MarkMarkPosFormat1
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{ return (this+mark1Coverage).intersects (glyphs) &&
(this+mark2Coverage).intersects (glyphs); }
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
if (unlikely (!(this+mark1Coverage).add_coverage (c->input))) return;
if (unlikely (!(this+mark2Coverage).add_coverage (c->input))) return;
}
- inline const Coverage &get_coverage (void) const
- { return this+mark1Coverage; }
+ const Coverage &get_coverage () const { return this+mark1Coverage; }
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
hb_buffer_t *buffer = c->buffer;
@@ -1439,14 +1432,14 @@ struct MarkMarkPosFormat1
return_trace ((this+mark1Array).apply (c, mark1_index, mark2_index, this+mark2Array, classCount, j));
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -1480,7 +1473,7 @@ struct MarkMarkPosFormat1
struct MarkMarkPos
{
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
@@ -1532,10 +1525,9 @@ struct PosLookupSubTable
};
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
+ typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
{
TRACE_DISPATCH (this, lookup_type);
- if (unlikely (!c->may_dispatch (this, &u.sub_format))) return_trace (c->no_dispatch_return_value ());
switch (lookup_type) {
case Single: return_trace (u.single.dispatch (c));
case Pair: return_trace (u.pair.dispatch (c));
@@ -1552,7 +1544,6 @@ struct PosLookupSubTable
protected:
union {
- HBUINT16 sub_format;
SinglePos single;
PairPos pair;
CursivePos cursive;
@@ -1564,7 +1555,7 @@ struct PosLookupSubTable
ExtensionPos extension;
} u;
public:
- DEFINE_SIZE_UNION (2, sub_format);
+ DEFINE_SIZE_MIN (0);
};
@@ -1572,34 +1563,34 @@ struct PosLookup : Lookup
{
typedef struct PosLookupSubTable SubTable;
- inline const SubTable& get_subtable (unsigned int i) const
+ const SubTable& get_subtable (unsigned int i) const
{ return Lookup::get_subtable<SubTable> (i); }
- inline bool is_reverse (void) const
+ bool is_reverse () const
{
return false;
}
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
return_trace (dispatch (c));
}
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
hb_intersects_context_t c (glyphs);
return dispatch (&c);
}
- inline hb_collect_glyphs_context_t::return_t collect_glyphs (hb_collect_glyphs_context_t *c) const
+ hb_collect_glyphs_context_t::return_t collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
return_trace (dispatch (c));
}
template <typename set_t>
- inline void add_coverage (set_t *glyphs) const
+ void add_coverage (set_t *glyphs) const
{
hb_add_coverage_context_t<set_t> c (glyphs);
dispatch (&c);
@@ -1608,16 +1599,16 @@ struct PosLookup : Lookup
static bool apply_recurse_func (hb_ot_apply_context_t *c, unsigned int lookup_index);
template <typename context_t>
- static inline typename context_t::return_t dispatch_recurse_func (context_t *c, unsigned int lookup_index);
+ static typename context_t::return_t dispatch_recurse_func (context_t *c, unsigned int lookup_index);
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{ return Lookup::dispatch<SubTable> (c); }
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{ return Lookup::subset<SubTable> (c); }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{ return Lookup::sanitize<SubTable> (c); }
};
@@ -1628,19 +1619,19 @@ struct PosLookup : Lookup
struct GPOS : GSUBGPOS
{
- static const hb_tag_t tableTag = HB_OT_TAG_GPOS;
+ enum { tableTag = HB_OT_TAG_GPOS };
- inline const PosLookup& get_lookup (unsigned int i) const
+ const PosLookup& get_lookup (unsigned int i) const
{ return CastR<PosLookup> (GSUBGPOS::get_lookup (i)); }
static inline void position_start (hb_font_t *font, hb_buffer_t *buffer);
static inline void position_finish_advances (hb_font_t *font, hb_buffer_t *buffer);
static inline void position_finish_offsets (hb_font_t *font, hb_buffer_t *buffer);
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{ return GSUBGPOS::subset<PosLookup> (c); }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{ return GSUBGPOS::sanitize<PosLookup> (c); }
HB_INTERNAL bool is_blacklisted (hb_blob_t *blob,
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 27bd440dabf..180e7f2decd 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
@@ -36,16 +36,15 @@ namespace OT {
static inline void SingleSubst_serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &glyphs,
- Supplier<GlyphID> &substitutes,
- unsigned int num_glyphs);
+ hb_array_t<const GlyphID> glyphs,
+ hb_array_t<const GlyphID> substitutes);
struct SingleSubstFormat1
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{ return (this+coverage).intersects (glyphs); }
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
for (Coverage::Iter iter (this+coverage); iter.more (); iter.next ())
@@ -58,7 +57,7 @@ struct SingleSubstFormat1
}
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
if (unlikely (!(this+coverage).add_coverage (c->input))) return;
@@ -71,16 +70,15 @@ struct SingleSubstFormat1
}
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool would_apply (hb_would_apply_context_t *c) const
+ bool would_apply (hb_would_apply_context_t *c) const
{
TRACE_WOULD_APPLY (this);
return_trace (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
}
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
hb_codepoint_t glyph_id = c->buffer->cur().codepoint;
@@ -95,43 +93,37 @@ struct SingleSubstFormat1
return_trace (true);
}
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &glyphs,
- unsigned int num_glyphs,
- int delta)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs,
+ int delta)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (*this))) return_trace (false);
- if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return_trace (false);
+ if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs))) return_trace (false);
deltaGlyphID.set (delta); /* TODO(serialize) overflow? */
return_trace (true);
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
+ const hb_set_t &glyphset = *c->plan->glyphset;
+ const hb_map_t &glyph_map = *c->plan->glyph_map;
hb_vector_t<GlyphID> from;
hb_vector_t<GlyphID> to;
hb_codepoint_t delta = deltaGlyphID;
for (Coverage::Iter iter (this+coverage); iter.more (); iter.next ())
{
- if (!c->plan->glyphset->has (iter.get_glyph ()))
- continue;
- from.push ()->set (iter.get_glyph ());
- to.push ()->set ((iter.get_glyph () + delta) & 0xFFFF);
+ if (!glyphset.has (iter.get_glyph ())) continue;
+ from.push ()->set (glyph_map[iter.get_glyph ()]);
+ to.push ()->set (glyph_map[(iter.get_glyph () + delta) & 0xFFFF]);
}
- c->serializer->err (from.in_error () || to.in_error ());
-
- Supplier<GlyphID> from_supplier (&from);
- Supplier<GlyphID> to_supplier (&to);
- SingleSubst_serialize (c->serializer,
- from_supplier,
- to_supplier,
- from.len);
+ c->serializer->propagate_error (from, to);
+ SingleSubst_serialize (c->serializer, from, to);
return_trace (from.len);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (coverage.sanitize (c, this) && deltaGlyphID.sanitize (c));
@@ -150,10 +142,10 @@ struct SingleSubstFormat1
struct SingleSubstFormat2
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{ return (this+coverage).intersects (glyphs); }
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
unsigned int count = substitute.len;
@@ -166,7 +158,7 @@ struct SingleSubstFormat2
}
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
if (unlikely (!(this+coverage).add_coverage (c->input))) return;
@@ -179,16 +171,15 @@ struct SingleSubstFormat2
}
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool would_apply (hb_would_apply_context_t *c) const
+ bool would_apply (hb_would_apply_context_t *c) const
{
TRACE_WOULD_APPLY (this);
return_trace (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
}
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
@@ -201,42 +192,36 @@ struct SingleSubstFormat2
return_trace (true);
}
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &glyphs,
- Supplier<GlyphID> &substitutes,
- unsigned int num_glyphs)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs,
+ hb_array_t<const GlyphID> substitutes)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (*this))) return_trace (false);
- if (unlikely (!substitute.serialize (c, substitutes, num_glyphs))) return_trace (false);
- if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return_trace (false);
+ if (unlikely (!substitute.serialize (c, substitutes))) return_trace (false);
+ if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs))) return_trace (false);
return_trace (true);
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
+ const hb_set_t &glyphset = *c->plan->glyphset;
+ const hb_map_t &glyph_map = *c->plan->glyph_map;
hb_vector_t<GlyphID> from;
hb_vector_t<GlyphID> to;
for (Coverage::Iter iter (this+coverage); iter.more (); iter.next ())
{
- if (!c->plan->glyphset->has (iter.get_glyph ()))
- continue;
- from.push ()->set (iter.get_glyph ());
- to.push ()->set (substitute[iter.get_coverage ()]);
+ if (!glyphset.has (iter.get_glyph ())) continue;
+ from.push ()->set (glyph_map[iter.get_glyph ()]);
+ to.push ()->set (glyph_map[substitute[iter.get_coverage ()]]);
}
- c->serializer->err (from.in_error () || to.in_error ());
-
- Supplier<GlyphID> from_supplier (&from);
- Supplier<GlyphID> to_supplier (&to);
- SingleSubst_serialize (c->serializer,
- from_supplier,
- to_supplier,
- from.len);
+ c->serializer->propagate_error (from, to);
+ SingleSubst_serialize (c->serializer, from, to);
return_trace (from.len);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (coverage.sanitize (c, this) && substitute.sanitize (c));
@@ -256,35 +241,35 @@ struct SingleSubstFormat2
struct SingleSubst
{
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &glyphs,
- Supplier<GlyphID> &substitutes,
- unsigned int num_glyphs)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs,
+ hb_array_t<const GlyphID> substitutes)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (u.format))) return_trace (false);
unsigned int format = 2;
int delta = 0;
- if (num_glyphs) {
+ if (glyphs.len)
+ {
format = 1;
/* TODO(serialize) check for wrap-around */
delta = substitutes[0] - glyphs[0];
- for (unsigned int i = 1; i < num_glyphs; i++)
- if (delta != substitutes[i] - glyphs[i]) {
+ for (unsigned int i = 1; i < glyphs.len; i++)
+ if (delta != (int) (substitutes[i] - glyphs[i])) {
format = 2;
break;
}
}
u.format.set (format);
switch (u.format) {
- case 1: return_trace (u.format1.serialize (c, glyphs, num_glyphs, delta));
- case 2: return_trace (u.format2.serialize (c, glyphs, substitutes, num_glyphs));
+ case 1: return_trace (u.format1.serialize (c, glyphs, delta));
+ case 2: return_trace (u.format2.serialize (c, glyphs, substitutes));
default:return_trace (false);
}
}
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
@@ -305,19 +290,13 @@ struct SingleSubst
static inline void
SingleSubst_serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &glyphs,
- Supplier<GlyphID> &substitutes,
- unsigned int num_glyphs)
-{
- c->start_embed<SingleSubst> ()->serialize (c,
- glyphs,
- substitutes,
- num_glyphs);
-}
+ hb_array_t<const GlyphID> glyphs,
+ hb_array_t<const GlyphID> substitutes)
+{ c->start_embed<SingleSubst> ()->serialize (c, glyphs, substitutes); }
struct Sequence
{
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
unsigned int count = substitute.len;
@@ -325,13 +304,13 @@ struct Sequence
c->out->add (substitute[i]);
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
c->output->add_array (substitute.arrayZ, substitute.len);
}
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
unsigned int count = substitute.len;
@@ -363,17 +342,14 @@ struct Sequence
return_trace (true);
}
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &glyphs,
- unsigned int num_glyphs)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
- if (unlikely (!substitute.serialize (c, glyphs, num_glyphs))) return_trace (false);
- return_trace (true);
+ return_trace (substitute.serialize (c, glyphs));
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (substitute.sanitize (c));
@@ -388,10 +364,10 @@ struct Sequence
struct MultipleSubstFormat1
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{ return (this+coverage).intersects (glyphs); }
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
unsigned int count = sequence.len;
@@ -404,7 +380,7 @@ struct MultipleSubstFormat1
}
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
if (unlikely (!(this+coverage).add_coverage (c->input))) return;
@@ -413,16 +389,15 @@ struct MultipleSubstFormat1
(this+sequence[i]).collect_glyphs (c);
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool would_apply (hb_would_apply_context_t *c) const
+ bool would_apply (hb_would_apply_context_t *c) const
{
TRACE_WOULD_APPLY (this);
return_trace (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
}
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -432,32 +407,33 @@ struct MultipleSubstFormat1
return_trace ((this+sequence[index]).apply (c));
}
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &glyphs,
- Supplier<unsigned int> &substitute_len_list,
- unsigned int num_glyphs,
- Supplier<GlyphID> &substitute_glyphs_list)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs,
+ hb_array_t<const unsigned int> substitute_len_list,
+ hb_array_t<const GlyphID> substitute_glyphs_list)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (*this))) return_trace (false);
- if (unlikely (!sequence.serialize (c, num_glyphs))) return_trace (false);
- for (unsigned int i = 0; i < num_glyphs; i++)
- if (unlikely (!sequence[i].serialize (c, this).serialize (c,
- substitute_glyphs_list,
- substitute_len_list[i]))) return_trace (false);
- substitute_len_list += num_glyphs;
- if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return_trace (false);
- return_trace (true);
+ if (unlikely (!sequence.serialize (c, glyphs.len))) return_trace (false);
+ for (unsigned int i = 0; i < glyphs.len; i++)
+ {
+ unsigned int substitute_len = substitute_len_list[i];
+ if (unlikely (!sequence[i].serialize (c, this)
+ .serialize (c, substitute_glyphs_list.sub_array (0, substitute_len))))
+ return_trace (false);
+ substitute_glyphs_list += substitute_len;
+ }
+ return_trace (coverage.serialize (c, this).serialize (c, glyphs));
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (coverage.sanitize (c, this) && sequence.sanitize (c, this));
@@ -477,24 +453,23 @@ struct MultipleSubstFormat1
struct MultipleSubst
{
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &glyphs,
- Supplier<unsigned int> &substitute_len_list,
- unsigned int num_glyphs,
- Supplier<GlyphID> &substitute_glyphs_list)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs,
+ hb_array_t<const unsigned int> substitute_len_list,
+ hb_array_t<const GlyphID> substitute_glyphs_list)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (u.format))) return_trace (false);
unsigned int format = 1;
u.format.set (format);
switch (u.format) {
- case 1: return_trace (u.format1.serialize (c, glyphs, substitute_len_list, num_glyphs, substitute_glyphs_list));
+ case 1: return_trace (u.format1.serialize (c, glyphs, substitute_len_list, substitute_glyphs_list));
default:return_trace (false);
}
}
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
@@ -513,7 +488,7 @@ struct MultipleSubst
struct AlternateSet
{
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
unsigned int count = alternates.len;
@@ -521,13 +496,13 @@ struct AlternateSet
c->out->add (alternates[i]);
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
c->output->add_array (alternates.arrayZ, alternates.len);
}
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
unsigned int count = alternates.len;
@@ -552,17 +527,14 @@ struct AlternateSet
return_trace (true);
}
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &glyphs,
- unsigned int num_glyphs)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
- if (unlikely (!alternates.serialize (c, glyphs, num_glyphs))) return_trace (false);
- return_trace (true);
+ return_trace (alternates.serialize (c, glyphs));
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (alternates.sanitize (c));
@@ -578,10 +550,10 @@ struct AlternateSet
struct AlternateSubstFormat1
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{ return (this+coverage).intersects (glyphs); }
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
unsigned int count = alternateSet.len;
@@ -594,7 +566,7 @@ struct AlternateSubstFormat1
}
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
if (unlikely (!(this+coverage).add_coverage (c->input))) return;
@@ -607,16 +579,15 @@ struct AlternateSubstFormat1
}
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool would_apply (hb_would_apply_context_t *c) const
+ bool would_apply (hb_would_apply_context_t *c) const
{
TRACE_WOULD_APPLY (this);
return_trace (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
}
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -626,32 +597,33 @@ struct AlternateSubstFormat1
return_trace ((this+alternateSet[index]).apply (c));
}
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &glyphs,
- Supplier<unsigned int> &alternate_len_list,
- unsigned int num_glyphs,
- Supplier<GlyphID> &alternate_glyphs_list)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs,
+ hb_array_t<const unsigned int> alternate_len_list,
+ hb_array_t<const GlyphID> alternate_glyphs_list)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (*this))) return_trace (false);
- if (unlikely (!alternateSet.serialize (c, num_glyphs))) return_trace (false);
- for (unsigned int i = 0; i < num_glyphs; i++)
- if (unlikely (!alternateSet[i].serialize (c, this).serialize (c,
- alternate_glyphs_list,
- alternate_len_list[i]))) return_trace (false);
- alternate_len_list += num_glyphs;
- if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return_trace (false);
- return_trace (true);
+ if (unlikely (!alternateSet.serialize (c, glyphs.len))) return_trace (false);
+ for (unsigned int i = 0; i < glyphs.len; i++)
+ {
+ unsigned int alternate_len = alternate_len_list[i];
+ if (unlikely (!alternateSet[i].serialize (c, this)
+ .serialize (c, alternate_glyphs_list.sub_array (0, alternate_len))))
+ return_trace (false);
+ alternate_glyphs_list += alternate_len;
+ }
+ return_trace (coverage.serialize (c, this).serialize (c, glyphs));
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (coverage.sanitize (c, this) && alternateSet.sanitize (c, this));
@@ -671,24 +643,23 @@ struct AlternateSubstFormat1
struct AlternateSubst
{
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &glyphs,
- Supplier<unsigned int> &alternate_len_list,
- unsigned int num_glyphs,
- Supplier<GlyphID> &alternate_glyphs_list)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> glyphs,
+ hb_array_t<const unsigned int> alternate_len_list,
+ hb_array_t<const GlyphID> alternate_glyphs_list)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (u.format))) return_trace (false);
unsigned int format = 1;
u.format.set (format);
switch (u.format) {
- case 1: return_trace (u.format1.serialize (c, glyphs, alternate_len_list, num_glyphs, alternate_glyphs_list));
+ case 1: return_trace (u.format1.serialize (c, glyphs, alternate_len_list, alternate_glyphs_list));
default:return_trace (false);
}
}
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
@@ -708,7 +679,7 @@ struct AlternateSubst
struct Ligature
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
unsigned int count = component.lenP1;
for (unsigned int i = 1; i < count; i++)
@@ -717,7 +688,7 @@ struct Ligature
return true;
}
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
unsigned int count = component.lenP1;
@@ -727,14 +698,14 @@ struct Ligature
c->out->add (ligGlyph);
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
c->input->add_array (component.arrayZ, component.lenP1 ? component.lenP1 - 1 : 0);
c->output->add (ligGlyph);
}
- inline bool would_apply (hb_would_apply_context_t *c) const
+ bool would_apply (hb_would_apply_context_t *c) const
{
TRACE_WOULD_APPLY (this);
if (c->len != component.lenP1)
@@ -747,7 +718,7 @@ struct Ligature
return_trace (true);
}
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
unsigned int count = component.lenP1;
@@ -786,20 +757,19 @@ struct Ligature
return_trace (true);
}
- inline bool serialize (hb_serialize_context_t *c,
- GlyphID ligature,
- Supplier<GlyphID> &components, /* Starting from second */
- unsigned int num_components /* Including first component */)
+ bool serialize (hb_serialize_context_t *c,
+ GlyphID ligature,
+ hb_array_t<const GlyphID> components /* Starting from second */)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (*this))) return_trace (false);
ligGlyph = ligature;
- if (unlikely (!component.serialize (c, components, num_components))) return_trace (false);
+ if (unlikely (!component.serialize (c, components))) return_trace (false);
return_trace (true);
}
public:
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (ligGlyph.sanitize (c) && component.sanitize (c));
@@ -817,7 +787,7 @@ struct Ligature
struct LigatureSet
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
unsigned int num_ligs = ligature.len;
for (unsigned int i = 0; i < num_ligs; i++)
@@ -826,7 +796,7 @@ struct LigatureSet
return false;
}
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
unsigned int num_ligs = ligature.len;
@@ -834,7 +804,7 @@ struct LigatureSet
(this+ligature[i]).closure (c);
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
unsigned int num_ligs = ligature.len;
@@ -842,7 +812,7 @@ struct LigatureSet
(this+ligature[i]).collect_glyphs (c);
}
- inline bool would_apply (hb_would_apply_context_t *c) const
+ bool would_apply (hb_would_apply_context_t *c) const
{
TRACE_WOULD_APPLY (this);
unsigned int num_ligs = ligature.len;
@@ -855,7 +825,7 @@ struct LigatureSet
return_trace (false);
}
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
unsigned int num_ligs = ligature.len;
@@ -868,26 +838,28 @@ struct LigatureSet
return_trace (false);
}
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &ligatures,
- Supplier<unsigned int> &component_count_list,
- unsigned int num_ligatures,
- Supplier<GlyphID> &component_list /* Starting from second for each ligature */)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> ligatures,
+ hb_array_t<const unsigned int> component_count_list,
+ hb_array_t<const GlyphID> component_list /* Starting from second for each ligature */)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (*this))) return_trace (false);
- if (unlikely (!ligature.serialize (c, num_ligatures))) return_trace (false);
- for (unsigned int i = 0; i < num_ligatures; i++)
- if (unlikely (!ligature[i].serialize (c, this).serialize (c,
- ligatures[i],
- component_list,
- component_count_list[i]))) return_trace (false);
- ligatures += num_ligatures;
- component_count_list += num_ligatures;
+ if (unlikely (!ligature.serialize (c, ligatures.len))) return_trace (false);
+ for (unsigned int i = 0; i < ligatures.len; i++)
+ {
+ unsigned int component_count = MAX<int> (component_count_list[i] - 1, 0);
+ if (unlikely (!ligature[i].serialize (c, this)
+ .serialize (c,
+ ligatures[i],
+ component_list.sub_array (0, component_count))))
+ return_trace (false);
+ component_list += component_count;
+ }
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (ligature.sanitize (c, this));
@@ -903,7 +875,7 @@ struct LigatureSet
struct LigatureSubstFormat1
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
unsigned int count = ligatureSet.len;
for (Coverage::Iter iter (this+coverage); iter.more (); iter.next ())
@@ -917,7 +889,7 @@ struct LigatureSubstFormat1
return false;
}
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
unsigned int count = ligatureSet.len;
@@ -930,7 +902,7 @@ struct LigatureSubstFormat1
}
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
if (unlikely (!(this+coverage).add_coverage (c->input))) return;
@@ -943,10 +915,9 @@ struct LigatureSubstFormat1
}
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool would_apply (hb_would_apply_context_t *c) const
+ bool would_apply (hb_would_apply_context_t *c) const
{
TRACE_WOULD_APPLY (this);
unsigned int index = (this+coverage).get_coverage (c->glyphs[0]);
@@ -956,7 +927,7 @@ struct LigatureSubstFormat1
return_trace (lig_set.would_apply (c));
}
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -967,36 +938,40 @@ struct LigatureSubstFormat1
return_trace (lig_set.apply (c));
}
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &first_glyphs,
- Supplier<unsigned int> &ligature_per_first_glyph_count_list,
- unsigned int num_first_glyphs,
- Supplier<GlyphID> &ligatures_list,
- Supplier<unsigned int> &component_count_list,
- Supplier<GlyphID> &component_list /* Starting from second for each ligature */)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> first_glyphs,
+ hb_array_t<const unsigned int> ligature_per_first_glyph_count_list,
+ hb_array_t<const GlyphID> ligatures_list,
+ hb_array_t<const unsigned int> component_count_list,
+ hb_array_t<const GlyphID> component_list /* Starting from second for each ligature */)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (*this))) return_trace (false);
- if (unlikely (!ligatureSet.serialize (c, num_first_glyphs))) return_trace (false);
- for (unsigned int i = 0; i < num_first_glyphs; i++)
- if (unlikely (!ligatureSet[i].serialize (c, this).serialize (c,
- ligatures_list,
- component_count_list,
- ligature_per_first_glyph_count_list[i],
- component_list))) return_trace (false);
- 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);
+ if (unlikely (!ligatureSet.serialize (c, first_glyphs.len))) return_trace (false);
+ for (unsigned int i = 0; i < first_glyphs.len; i++)
+ {
+ unsigned int ligature_count = ligature_per_first_glyph_count_list[i];
+ if (unlikely (!ligatureSet[i].serialize (c, this)
+ .serialize (c,
+ ligatures_list.sub_array (0, ligature_count),
+ component_count_list.sub_array (0, ligature_count),
+ component_list))) return_trace (false);
+ ligatures_list += ligature_count;
+ component_count_list += ligature_count;
+ for (unsigned int i = 0; i < ligature_count; i++)
+ component_list += MAX<int> (component_count_list[i] - 1, 0);
+ }
+ return_trace (coverage.serialize (c, this).serialize (c, first_glyphs));
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (coverage.sanitize (c, this) && ligatureSet.sanitize (c, this));
@@ -1016,13 +991,12 @@ struct LigatureSubstFormat1
struct LigatureSubst
{
- inline bool serialize (hb_serialize_context_t *c,
- Supplier<GlyphID> &first_glyphs,
- Supplier<unsigned int> &ligature_per_first_glyph_count_list,
- unsigned int num_first_glyphs,
- Supplier<GlyphID> &ligatures_list,
- Supplier<unsigned int> &component_count_list,
- Supplier<GlyphID> &component_list /* Starting from second for each ligature */)
+ bool serialize (hb_serialize_context_t *c,
+ hb_array_t<const GlyphID> first_glyphs,
+ hb_array_t<const unsigned int> ligature_per_first_glyph_count_list,
+ hb_array_t<const GlyphID> ligatures_list,
+ hb_array_t<const unsigned int> component_count_list,
+ hb_array_t<const GlyphID> component_list /* Starting from second for each ligature */)
{
TRACE_SERIALIZE (this);
if (unlikely (!c->extend_min (u.format))) return_trace (false);
@@ -1032,7 +1006,6 @@ struct LigatureSubst
case 1: return_trace (u.format1.serialize (c,
first_glyphs,
ligature_per_first_glyph_count_list,
- num_first_glyphs,
ligatures_list,
component_count_list,
component_list));
@@ -1041,7 +1014,7 @@ struct LigatureSubst
}
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
@@ -1067,13 +1040,13 @@ struct ExtensionSubst : Extension<ExtensionSubst>
{
typedef struct SubstLookupSubTable SubTable;
- inline bool is_reverse (void) const;
+ bool is_reverse () const;
};
struct ReverseChainSingleSubstFormat1
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
if (!(this+coverage).intersects (glyphs))
return false;
@@ -1095,7 +1068,7 @@ struct ReverseChainSingleSubstFormat1
return true;
}
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
@@ -1123,7 +1096,7 @@ struct ReverseChainSingleSubstFormat1
}
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
if (unlikely (!(this+coverage).add_coverage (c->input))) return;
@@ -1144,16 +1117,15 @@ struct ReverseChainSingleSubstFormat1
c->output->add_array (substitute.arrayZ, substitute.len);
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool would_apply (hb_would_apply_context_t *c) const
+ bool would_apply (hb_would_apply_context_t *c) const
{
TRACE_WOULD_APPLY (this);
return_trace (c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED);
}
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
if (unlikely (c->nesting_level_left != HB_MAX_NESTING_LEVEL))
@@ -1186,14 +1158,14 @@ struct ReverseChainSingleSubstFormat1
return_trace (false);
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!(coverage.sanitize (c, this) && backtrack.sanitize (c, this)))
@@ -1228,7 +1200,7 @@ struct ReverseChainSingleSubstFormat1
struct ReverseChainSingleSubst
{
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
@@ -1268,10 +1240,9 @@ struct SubstLookupSubTable
};
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
+ typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
{
TRACE_DISPATCH (this, lookup_type);
- if (unlikely (!c->may_dispatch (this, &u.sub_format))) return_trace (c->no_dispatch_return_value ());
switch (lookup_type) {
case Single: return_trace (u.single.dispatch (c));
case Multiple: return_trace (u.multiple.dispatch (c));
@@ -1287,7 +1258,6 @@ struct SubstLookupSubTable
protected:
union {
- HBUINT16 sub_format;
SingleSubst single;
MultipleSubst multiple;
AlternateSubst alternate;
@@ -1298,7 +1268,7 @@ struct SubstLookupSubTable
ReverseChainSingleSubst reverseChainContextSingle;
} u;
public:
- DEFINE_SIZE_UNION (2, sub_format);
+ DEFINE_SIZE_MIN (0);
};
@@ -1306,13 +1276,13 @@ struct SubstLookup : Lookup
{
typedef SubstLookupSubTable SubTable;
- inline const SubTable& get_subtable (unsigned int i) const
+ const SubTable& get_subtable (unsigned int i) const
{ return Lookup::get_subtable<SubTable> (i); }
- inline static bool lookup_type_is_reverse (unsigned int lookup_type)
+ static bool lookup_type_is_reverse (unsigned int lookup_type)
{ return lookup_type == SubTable::ReverseChainSingle; }
- inline bool is_reverse (void) const
+ bool is_reverse () const
{
unsigned int type = get_type ();
if (unlikely (type == SubTable::Extension))
@@ -1320,19 +1290,19 @@ struct SubstLookup : Lookup
return lookup_type_is_reverse (type);
}
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
return_trace (dispatch (c));
}
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
hb_intersects_context_t c (glyphs);
return dispatch (&c);
}
- inline hb_closure_context_t::return_t closure (hb_closure_context_t *c, unsigned int this_index) const
+ hb_closure_context_t::return_t closure (hb_closure_context_t *c, unsigned int this_index) const
{
TRACE_CLOSURE (this);
if (!c->should_visit_lookup (this_index))
@@ -1347,7 +1317,7 @@ struct SubstLookup : Lookup
return_trace (ret);
}
- inline hb_collect_glyphs_context_t::return_t collect_glyphs (hb_collect_glyphs_context_t *c) const
+ hb_collect_glyphs_context_t::return_t collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
c->set_recurse_func (dispatch_recurse_func<hb_collect_glyphs_context_t>);
@@ -1355,14 +1325,14 @@ struct SubstLookup : Lookup
}
template <typename set_t>
- inline void add_coverage (set_t *glyphs) const
+ void add_coverage (set_t *glyphs) const
{
hb_add_coverage_context_t<set_t> c (glyphs);
dispatch (&c);
}
- inline bool would_apply (hb_would_apply_context_t *c,
- const hb_ot_layout_lookup_accelerator_t *accel) const
+ bool would_apply (hb_would_apply_context_t *c,
+ const hb_ot_layout_lookup_accelerator_t *accel) const
{
TRACE_WOULD_APPLY (this);
if (unlikely (!c->len)) return_trace (false);
@@ -1372,77 +1342,70 @@ struct SubstLookup : Lookup
static bool apply_recurse_func (hb_ot_apply_context_t *c, unsigned int lookup_index);
- inline SubTable& serialize_subtable (hb_serialize_context_t *c,
+ SubTable& serialize_subtable (hb_serialize_context_t *c,
unsigned int i)
{ return get_subtables<SubTable> ()[i].serialize (c, this); }
- inline bool serialize_single (hb_serialize_context_t *c,
- uint32_t lookup_props,
- Supplier<GlyphID> &glyphs,
- Supplier<GlyphID> &substitutes,
- unsigned int num_glyphs)
+ bool serialize_single (hb_serialize_context_t *c,
+ uint32_t lookup_props,
+ hb_array_t<const GlyphID> glyphs,
+ hb_array_t<const GlyphID> substitutes)
{
TRACE_SERIALIZE (this);
if (unlikely (!Lookup::serialize (c, SubTable::Single, lookup_props, 1))) return_trace (false);
- return_trace (serialize_subtable (c, 0).u.single.serialize (c, glyphs, substitutes, num_glyphs));
+ return_trace (serialize_subtable (c, 0).u.single.serialize (c, glyphs, substitutes));
}
- inline bool serialize_multiple (hb_serialize_context_t *c,
- uint32_t lookup_props,
- Supplier<GlyphID> &glyphs,
- Supplier<unsigned int> &substitute_len_list,
- unsigned int num_glyphs,
- Supplier<GlyphID> &substitute_glyphs_list)
+ bool serialize_multiple (hb_serialize_context_t *c,
+ uint32_t lookup_props,
+ hb_array_t<const GlyphID> glyphs,
+ hb_array_t<const unsigned int> substitute_len_list,
+ hb_array_t<const GlyphID> substitute_glyphs_list)
{
TRACE_SERIALIZE (this);
if (unlikely (!Lookup::serialize (c, SubTable::Multiple, lookup_props, 1))) return_trace (false);
return_trace (serialize_subtable (c, 0).u.multiple.serialize (c,
glyphs,
substitute_len_list,
- num_glyphs,
substitute_glyphs_list));
}
- inline bool serialize_alternate (hb_serialize_context_t *c,
- uint32_t lookup_props,
- Supplier<GlyphID> &glyphs,
- Supplier<unsigned int> &alternate_len_list,
- unsigned int num_glyphs,
- Supplier<GlyphID> &alternate_glyphs_list)
+ bool serialize_alternate (hb_serialize_context_t *c,
+ uint32_t lookup_props,
+ hb_array_t<const GlyphID> glyphs,
+ hb_array_t<const unsigned int> alternate_len_list,
+ hb_array_t<const GlyphID> alternate_glyphs_list)
{
TRACE_SERIALIZE (this);
if (unlikely (!Lookup::serialize (c, SubTable::Alternate, lookup_props, 1))) return_trace (false);
return_trace (serialize_subtable (c, 0).u.alternate.serialize (c,
glyphs,
alternate_len_list,
- num_glyphs,
alternate_glyphs_list));
}
- inline bool serialize_ligature (hb_serialize_context_t *c,
- uint32_t lookup_props,
- Supplier<GlyphID> &first_glyphs,
- Supplier<unsigned int> &ligature_per_first_glyph_count_list,
- unsigned int num_first_glyphs,
- Supplier<GlyphID> &ligatures_list,
- Supplier<unsigned int> &component_count_list,
- Supplier<GlyphID> &component_list /* Starting from second for each ligature */)
+ bool serialize_ligature (hb_serialize_context_t *c,
+ uint32_t lookup_props,
+ hb_array_t<const GlyphID> first_glyphs,
+ hb_array_t<const unsigned int> ligature_per_first_glyph_count_list,
+ hb_array_t<const GlyphID> ligatures_list,
+ hb_array_t<const unsigned int> component_count_list,
+ hb_array_t<const GlyphID> component_list /* Starting from second for each ligature */)
{
TRACE_SERIALIZE (this);
if (unlikely (!Lookup::serialize (c, SubTable::Ligature, lookup_props, 1))) return_trace (false);
return_trace (serialize_subtable (c, 0).u.ligature.serialize (c,
first_glyphs,
ligature_per_first_glyph_count_list,
- num_first_glyphs,
ligatures_list,
component_count_list,
component_list));
}
template <typename context_t>
- static inline typename context_t::return_t dispatch_recurse_func (context_t *c, unsigned int lookup_index);
+ static typename context_t::return_t dispatch_recurse_func (context_t *c, unsigned int lookup_index);
- static inline hb_closure_context_t::return_t dispatch_closure_recurse_func (hb_closure_context_t *c, unsigned int lookup_index)
+ static hb_closure_context_t::return_t dispatch_closure_recurse_func (hb_closure_context_t *c, unsigned int lookup_index)
{
if (!c->should_visit_lookup (lookup_index))
return HB_VOID;
@@ -1458,13 +1421,13 @@ struct SubstLookup : Lookup
}
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{ return Lookup::dispatch<SubTable> (c); }
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{ return Lookup::subset<SubTable> (c); }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{ return Lookup::sanitize<SubTable> (c); }
};
@@ -1475,15 +1438,15 @@ struct SubstLookup : Lookup
struct GSUB : GSUBGPOS
{
- static const hb_tag_t tableTag = HB_OT_TAG_GSUB;
+ enum { tableTag = HB_OT_TAG_GSUB };
- inline const SubstLookup& get_lookup (unsigned int i) const
+ const SubstLookup& get_lookup (unsigned int i) const
{ return CastR<SubstLookup> (GSUBGPOS::get_lookup (i)); }
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{ return GSUBGPOS::subset<SubstLookup> (c); }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{ return GSUBGPOS::sanitize<SubstLookup> (c); }
HB_INTERNAL bool is_blacklisted (hb_blob_t *blob,
@@ -1498,7 +1461,7 @@ struct GSUB_accelerator_t : GSUB::accelerator_t {};
/* Out-of-class implementation for methods recursing */
-/*static*/ inline bool ExtensionSubst::is_reverse (void) const
+/*static*/ inline bool ExtensionSubst::is_reverse () const
{
unsigned int type = get_type ();
if (unlikely (type == SubTable::Extension))
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh
index a9bfee155d8..ac6e646384f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh
@@ -44,10 +44,10 @@ namespace OT {
struct hb_intersects_context_t :
hb_dispatch_context_t<hb_intersects_context_t, bool, 0>
{
- inline const char *get_name (void) { return "INTERSECTS"; }
+ const char *get_name () { return "INTERSECTS"; }
template <typename T>
- inline return_t dispatch (const T &obj) { return obj.intersects (this->glyphs); }
- static return_t default_return_value (void) { return false; }
+ return_t dispatch (const T &obj) { return obj.intersects (this->glyphs); }
+ static return_t default_return_value () { return false; }
bool stop_sublookup_iteration (return_t r) const { return r; }
const hb_set_t *glyphs;
@@ -61,12 +61,11 @@ struct hb_intersects_context_t :
struct hb_closure_context_t :
hb_dispatch_context_t<hb_closure_context_t, hb_void_t, HB_DEBUG_CLOSURE>
{
- inline const char *get_name (void) { return "CLOSURE"; }
+ const char *get_name () { return "CLOSURE"; }
typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned int lookup_index);
template <typename T>
- inline return_t dispatch (const T &obj) { obj.closure (this); return HB_VOID; }
- static return_t default_return_value (void) { return HB_VOID; }
- bool stop_sublookup_iteration (return_t r HB_UNUSED) const { return false; }
+ return_t dispatch (const T &obj) { obj.closure (this); return HB_VOID; }
+ static return_t default_return_value () { return HB_VOID; }
void recurse (unsigned int lookup_index)
{
if (unlikely (nesting_level_left == 0 || !recurse_func))
@@ -109,14 +108,11 @@ struct hb_closure_context_t :
debug_depth (0),
done_lookups (done_lookups_) {}
- ~hb_closure_context_t (void)
- {
- flush ();
- }
+ ~hb_closure_context_t () { flush (); }
void set_recurse_func (recurse_func_t func) { recurse_func = func; }
- void flush (void)
+ void flush ()
{
hb_set_union (glyphs, out);
hb_set_clear (out);
@@ -130,10 +126,10 @@ struct hb_closure_context_t :
struct hb_would_apply_context_t :
hb_dispatch_context_t<hb_would_apply_context_t, bool, HB_DEBUG_WOULD_APPLY>
{
- inline const char *get_name (void) { return "WOULD_APPLY"; }
+ const char *get_name () { return "WOULD_APPLY"; }
template <typename T>
- inline return_t dispatch (const T &obj) { return obj.would_apply (this); }
- static return_t default_return_value (void) { return false; }
+ return_t dispatch (const T &obj) { return obj.would_apply (this); }
+ static return_t default_return_value () { return false; }
bool stop_sublookup_iteration (return_t r) const { return r; }
hb_face_t *face;
@@ -157,12 +153,11 @@ struct hb_would_apply_context_t :
struct hb_collect_glyphs_context_t :
hb_dispatch_context_t<hb_collect_glyphs_context_t, hb_void_t, HB_DEBUG_COLLECT_GLYPHS>
{
- inline const char *get_name (void) { return "COLLECT_GLYPHS"; }
+ const char *get_name () { return "COLLECT_GLYPHS"; }
typedef return_t (*recurse_func_t) (hb_collect_glyphs_context_t *c, unsigned int lookup_index);
template <typename T>
- inline return_t dispatch (const T &obj) { obj.collect_glyphs (this); return HB_VOID; }
- static return_t default_return_value (void) { return HB_VOID; }
- bool stop_sublookup_iteration (return_t r HB_UNUSED) const { return false; }
+ return_t dispatch (const T &obj) { obj.collect_glyphs (this); return HB_VOID; }
+ static return_t default_return_value () { return HB_VOID; }
void recurse (unsigned int lookup_index)
{
if (unlikely (nesting_level_left == 0 || !recurse_func))
@@ -226,7 +221,7 @@ struct hb_collect_glyphs_context_t :
recursed_lookups (hb_set_create ()),
nesting_level_left (nesting_level_left_),
debug_depth (0) {}
- ~hb_collect_glyphs_context_t (void) { hb_set_destroy (recursed_lookups); }
+ ~hb_collect_glyphs_context_t () { hb_set_destroy (recursed_lookups); }
void set_recurse_func (recurse_func_t func) { recurse_func = func; }
};
@@ -237,11 +232,11 @@ template <typename set_t>
struct hb_add_coverage_context_t :
hb_dispatch_context_t<hb_add_coverage_context_t<set_t>, const Coverage &, HB_DEBUG_GET_COVERAGE>
{
- inline const char *get_name (void) { return "GET_COVERAGE"; }
+ const char *get_name () { return "GET_COVERAGE"; }
typedef const Coverage &return_t;
template <typename T>
- inline return_t dispatch (const T &obj) { return obj.get_coverage (); }
- static return_t default_return_value (void) { return Null(Coverage); }
+ return_t dispatch (const T &obj) { return obj.get_coverage (); }
+ static return_t default_return_value () { return Null(Coverage); }
bool stop_sublookup_iteration (return_t r) const
{
r.add_coverage (set);
@@ -262,7 +257,7 @@ struct hb_ot_apply_context_t :
{
struct matcher_t
{
- inline matcher_t (void) :
+ matcher_t () :
lookup_props (0),
ignore_zwnj (false),
ignore_zwj (false),
@@ -275,12 +270,12 @@ struct hb_ot_apply_context_t :
typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const HBUINT16 &value, const void *data);
- inline void set_ignore_zwnj (bool ignore_zwnj_) { ignore_zwnj = ignore_zwnj_; }
- inline void set_ignore_zwj (bool ignore_zwj_) { ignore_zwj = ignore_zwj_; }
- inline void set_lookup_props (unsigned int lookup_props_) { lookup_props = lookup_props_; }
- inline void set_mask (hb_mask_t mask_) { mask = mask_; }
- inline void set_syllable (uint8_t syllable_) { syllable = syllable_; }
- inline void set_match_func (match_func_t match_func_,
+ void set_ignore_zwnj (bool ignore_zwnj_) { ignore_zwnj = ignore_zwnj_; }
+ void set_ignore_zwj (bool ignore_zwj_) { ignore_zwj = ignore_zwj_; }
+ void set_lookup_props (unsigned int lookup_props_) { lookup_props = lookup_props_; }
+ void set_mask (hb_mask_t mask_) { mask = mask_; }
+ void set_syllable (uint8_t syllable_) { syllable = syllable_; }
+ void set_match_func (match_func_t match_func_,
const void *match_data_)
{ match_func = match_func_; match_data = match_data_; }
@@ -290,7 +285,7 @@ struct hb_ot_apply_context_t :
MATCH_MAYBE
};
- inline may_match_t may_match (const hb_glyph_info_t &info,
+ may_match_t may_match (const hb_glyph_info_t &info,
const HBUINT16 *glyph_data) const
{
if (!(info.mask & mask) ||
@@ -309,9 +304,8 @@ struct hb_ot_apply_context_t :
SKIP_MAYBE
};
- inline may_skip_t
- may_skip (const hb_ot_apply_context_t *c,
- const hb_glyph_info_t &info) const
+ may_skip_t may_skip (const hb_ot_apply_context_t *c,
+ const hb_glyph_info_t &info) const
{
if (!c->check_glyph_property (&info, lookup_props))
return SKIP_YES;
@@ -336,7 +330,7 @@ struct hb_ot_apply_context_t :
struct skipping_iterator_t
{
- inline void init (hb_ot_apply_context_t *c_, bool context_match = false)
+ void init (hb_ot_apply_context_t *c_, bool context_match = false)
{
c = c_;
match_glyph_data = nullptr;
@@ -348,19 +342,19 @@ struct hb_ot_apply_context_t :
matcher.set_ignore_zwj (context_match || c->auto_zwj);
matcher.set_mask (context_match ? -1 : c->lookup_mask);
}
- inline void set_lookup_props (unsigned int lookup_props)
+ void set_lookup_props (unsigned int lookup_props)
{
matcher.set_lookup_props (lookup_props);
}
- inline void set_match_func (matcher_t::match_func_t match_func_,
- const void *match_data_,
- const HBUINT16 glyph_data[])
+ void set_match_func (matcher_t::match_func_t match_func_,
+ const void *match_data_,
+ const HBUINT16 glyph_data[])
{
matcher.set_match_func (match_func_, match_data_);
match_glyph_data = glyph_data;
}
- inline void reset (unsigned int start_index_,
+ void reset (unsigned int start_index_,
unsigned int num_items_)
{
idx = start_index_;
@@ -369,15 +363,13 @@ struct hb_ot_apply_context_t :
matcher.set_syllable (start_index_ == c->buffer->idx ? c->buffer->cur().syllable () : 0);
}
- inline void reject (void) { num_items++; match_glyph_data--; }
+ void reject () { num_items++; match_glyph_data--; }
- inline matcher_t::may_skip_t
- may_skip (const hb_glyph_info_t &info) const
- {
- return matcher.may_skip (c, info);
- }
+ matcher_t::may_skip_t
+ may_skip (const hb_glyph_info_t &info) const
+ { return matcher.may_skip (c, info); }
- inline bool next (void)
+ bool next ()
{
assert (num_items > 0);
while (idx + num_items < end)
@@ -404,7 +396,7 @@ struct hb_ot_apply_context_t :
}
return false;
}
- inline bool prev (void)
+ bool prev ()
{
assert (num_items > 0);
while (idx > num_items - 1)
@@ -443,11 +435,11 @@ struct hb_ot_apply_context_t :
};
- inline const char *get_name (void) { return "APPLY"; }
+ const char *get_name () { return "APPLY"; }
typedef return_t (*recurse_func_t) (hb_ot_apply_context_t *c, unsigned int lookup_index);
template <typename T>
- inline return_t dispatch (const T &obj) { return obj.apply (this); }
- static return_t default_return_value (void) { return false; }
+ return_t dispatch (const T &obj) { return obj.apply (this); }
+ static return_t default_return_value () { return false; }
bool stop_sublookup_iteration (return_t r) const { return r; }
return_t recurse (unsigned int sub_lookup_index)
{
@@ -506,31 +498,30 @@ struct hb_ot_apply_context_t :
random (false),
random_state (1) { init_iters (); }
- inline void init_iters (void)
+ void init_iters ()
{
iter_input.init (this, false);
iter_context.init (this, true);
}
- inline void set_lookup_mask (hb_mask_t mask) { lookup_mask = mask; init_iters (); }
- inline void set_auto_zwj (bool auto_zwj_) { auto_zwj = auto_zwj_; init_iters (); }
- inline void set_auto_zwnj (bool auto_zwnj_) { auto_zwnj = auto_zwnj_; init_iters (); }
- inline void set_random (bool random_) { random = random_; }
- inline void set_recurse_func (recurse_func_t func) { recurse_func = func; }
- inline void set_lookup_index (unsigned int lookup_index_) { lookup_index = lookup_index_; }
- inline void set_lookup_props (unsigned int lookup_props_) { lookup_props = lookup_props_; init_iters (); }
+ void set_lookup_mask (hb_mask_t mask) { lookup_mask = mask; init_iters (); }
+ void set_auto_zwj (bool auto_zwj_) { auto_zwj = auto_zwj_; init_iters (); }
+ void set_auto_zwnj (bool auto_zwnj_) { auto_zwnj = auto_zwnj_; init_iters (); }
+ void set_random (bool random_) { random = random_; }
+ void set_recurse_func (recurse_func_t func) { recurse_func = func; }
+ void set_lookup_index (unsigned int lookup_index_) { lookup_index = lookup_index_; }
+ void set_lookup_props (unsigned int lookup_props_) { lookup_props = lookup_props_; init_iters (); }
- inline uint32_t random_number (void)
+ uint32_t random_number ()
{
/* http://www.cplusplus.com/reference/random/minstd_rand/ */
random_state = random_state * 48271 % 2147483647;
return random_state;
}
- inline bool
- match_properties_mark (hb_codepoint_t glyph,
- unsigned int glyph_props,
- unsigned int match_props) const
+ bool match_properties_mark (hb_codepoint_t glyph,
+ unsigned int glyph_props,
+ unsigned int match_props) const
{
/* If using mark filtering sets, the high short of
* match_props has the set index.
@@ -548,9 +539,8 @@ struct hb_ot_apply_context_t :
return true;
}
- inline bool
- check_glyph_property (const hb_glyph_info_t *info,
- unsigned int match_props) const
+ bool check_glyph_property (const hb_glyph_info_t *info,
+ unsigned int match_props) const
{
hb_codepoint_t glyph = info->codepoint;
unsigned int glyph_props = _hb_glyph_info_get_glyph_props (info);
@@ -567,7 +557,7 @@ struct hb_ot_apply_context_t :
return true;
}
- inline void _set_glyph_props (hb_codepoint_t glyph_index,
+ void _set_glyph_props (hb_codepoint_t glyph_index,
unsigned int class_guess = 0,
bool ligature = false,
bool component = false) const
@@ -594,23 +584,23 @@ struct hb_ot_apply_context_t :
_hb_glyph_info_set_glyph_props (&buffer->cur(), add_in | class_guess);
}
- inline void replace_glyph (hb_codepoint_t glyph_index) const
+ void replace_glyph (hb_codepoint_t glyph_index) const
{
_set_glyph_props (glyph_index);
buffer->replace_glyph (glyph_index);
}
- inline void replace_glyph_inplace (hb_codepoint_t glyph_index) const
+ void replace_glyph_inplace (hb_codepoint_t glyph_index) const
{
_set_glyph_props (glyph_index);
buffer->cur().codepoint = glyph_index;
}
- inline void replace_glyph_with_ligature (hb_codepoint_t glyph_index,
+ void replace_glyph_with_ligature (hb_codepoint_t glyph_index,
unsigned int class_guess) const
{
_set_glyph_props (glyph_index, class_guess, true);
buffer->replace_glyph (glyph_index);
}
- inline void output_glyph_for_component (hb_codepoint_t glyph_index,
+ void output_glyph_for_component (hb_codepoint_t glyph_index,
unsigned int class_guess) const
{
_set_glyph_props (glyph_index, class_guess, false, true);
@@ -623,7 +613,7 @@ struct hb_get_subtables_context_t :
hb_dispatch_context_t<hb_get_subtables_context_t, hb_void_t, HB_DEBUG_APPLY>
{
template <typename Type>
- static inline bool apply_to (const void *obj, OT::hb_ot_apply_context_t *c)
+ static bool apply_to (const void *obj, OT::hb_ot_apply_context_t *c)
{
const Type *typed_obj = (const Type *) obj;
return typed_obj->apply (c);
@@ -634,7 +624,7 @@ struct hb_get_subtables_context_t :
struct hb_applicable_t
{
template <typename T>
- inline void init (const T &obj_, hb_apply_func_t apply_func_)
+ void init (const T &obj_, hb_apply_func_t apply_func_)
{
obj = &obj_;
apply_func = apply_func_;
@@ -642,7 +632,7 @@ struct hb_get_subtables_context_t :
obj_.get_coverage ().add_coverage (&digest);
}
- inline bool apply (OT::hb_ot_apply_context_t *c) const
+ bool apply (OT::hb_ot_apply_context_t *c) const
{
return digest.may_have (c->buffer->cur().codepoint) && apply_func (obj, c);
}
@@ -656,16 +646,15 @@ struct hb_get_subtables_context_t :
typedef hb_vector_t<hb_applicable_t, 2> array_t;
/* Dispatch interface. */
- inline const char *get_name (void) { return "GET_SUBTABLES"; }
+ const char *get_name () { return "GET_SUBTABLES"; }
template <typename T>
- inline return_t dispatch (const T &obj)
+ return_t dispatch (const T &obj)
{
hb_applicable_t *entry = array.push();
entry->init (obj, apply_to<T>);
return HB_VOID;
}
- static return_t default_return_value (void) { return HB_VOID; }
- bool stop_sublookup_iteration (return_t r HB_UNUSED) const { return false; }
+ static return_t default_return_value () { return HB_VOID; }
hb_get_subtables_context_t (array_t &array_) :
array (array_),
@@ -1061,7 +1050,7 @@ static inline bool match_lookahead (hb_ot_apply_context_t *c,
struct LookupRecord
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -1298,14 +1287,14 @@ static inline bool context_apply_lookup (hb_ot_apply_context_t *c,
struct Rule
{
- inline bool intersects (const hb_set_t *glyphs, ContextClosureLookupContext &lookup_context) const
+ bool intersects (const hb_set_t *glyphs, ContextClosureLookupContext &lookup_context) const
{
return context_intersects (glyphs,
inputCount, inputZ.arrayZ,
lookup_context);
}
- inline void closure (hb_closure_context_t *c, ContextClosureLookupContext &lookup_context) const
+ void closure (hb_closure_context_t *c, ContextClosureLookupContext &lookup_context) const
{
TRACE_CLOSURE (this);
const UnsizedArrayOf<LookupRecord> &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord> >
@@ -1316,7 +1305,8 @@ struct Rule
lookup_context);
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c, ContextCollectGlyphsLookupContext &lookup_context) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c,
+ ContextCollectGlyphsLookupContext &lookup_context) const
{
TRACE_COLLECT_GLYPHS (this);
const UnsizedArrayOf<LookupRecord> &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord> >
@@ -1327,7 +1317,8 @@ struct Rule
lookup_context);
}
- inline bool would_apply (hb_would_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
+ bool would_apply (hb_would_apply_context_t *c,
+ ContextApplyLookupContext &lookup_context) const
{
TRACE_WOULD_APPLY (this);
const UnsizedArrayOf<LookupRecord> &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord> >
@@ -1335,7 +1326,8 @@ struct Rule
return_trace (context_would_apply_lookup (c, inputCount, inputZ.arrayZ, lookupCount, lookupRecord.arrayZ, lookup_context));
}
- inline bool apply (hb_ot_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
+ bool apply (hb_ot_apply_context_t *c,
+ ContextApplyLookupContext &lookup_context) const
{
TRACE_APPLY (this);
const UnsizedArrayOf<LookupRecord> &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord> >
@@ -1344,13 +1336,13 @@ struct Rule
}
public:
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (inputCount.sanitize (c) &&
lookupCount.sanitize (c) &&
c->check_range (inputZ.arrayZ,
- inputZ[0].static_size * (inputCount ? inputCount - 1 : 0) +
+ inputZ.item_size * (inputCount ? inputCount - 1 : 0) +
LookupRecord::static_size * lookupCount));
}
@@ -1371,7 +1363,8 @@ struct Rule
struct RuleSet
{
- inline bool intersects (const hb_set_t *glyphs, ContextClosureLookupContext &lookup_context) const
+ bool intersects (const hb_set_t *glyphs,
+ ContextClosureLookupContext &lookup_context) const
{
unsigned int num_rules = rule.len;
for (unsigned int i = 0; i < num_rules; i++)
@@ -1380,7 +1373,8 @@ struct RuleSet
return false;
}
- inline void closure (hb_closure_context_t *c, ContextClosureLookupContext &lookup_context) const
+ void closure (hb_closure_context_t *c,
+ ContextClosureLookupContext &lookup_context) const
{
TRACE_CLOSURE (this);
unsigned int num_rules = rule.len;
@@ -1388,7 +1382,8 @@ struct RuleSet
(this+rule[i]).closure (c, lookup_context);
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c, ContextCollectGlyphsLookupContext &lookup_context) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c,
+ ContextCollectGlyphsLookupContext &lookup_context) const
{
TRACE_COLLECT_GLYPHS (this);
unsigned int num_rules = rule.len;
@@ -1396,7 +1391,8 @@ struct RuleSet
(this+rule[i]).collect_glyphs (c, lookup_context);
}
- inline bool would_apply (hb_would_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
+ bool would_apply (hb_would_apply_context_t *c,
+ ContextApplyLookupContext &lookup_context) const
{
TRACE_WOULD_APPLY (this);
unsigned int num_rules = rule.len;
@@ -1408,7 +1404,8 @@ struct RuleSet
return_trace (false);
}
- inline bool apply (hb_ot_apply_context_t *c, ContextApplyLookupContext &lookup_context) const
+ bool apply (hb_ot_apply_context_t *c,
+ ContextApplyLookupContext &lookup_context) const
{
TRACE_APPLY (this);
unsigned int num_rules = rule.len;
@@ -1420,7 +1417,7 @@ struct RuleSet
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (rule.sanitize (c, this));
@@ -1437,7 +1434,7 @@ struct RuleSet
struct ContextFormat1
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
struct ContextClosureLookupContext lookup_context = {
{intersects_glyph},
@@ -1456,7 +1453,7 @@ struct ContextFormat1
return false;
}
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
@@ -1475,7 +1472,7 @@ struct ContextFormat1
}
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
(this+coverage).add_coverage (c->input);
@@ -1490,7 +1487,7 @@ struct ContextFormat1
(this+ruleSet[i]).collect_glyphs (c, lookup_context);
}
- inline bool would_apply (hb_would_apply_context_t *c) const
+ bool would_apply (hb_would_apply_context_t *c) const
{
TRACE_WOULD_APPLY (this);
@@ -1502,10 +1499,9 @@ struct ContextFormat1
return_trace (rule_set.would_apply (c, lookup_context));
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
@@ -1520,14 +1516,14 @@ struct ContextFormat1
return_trace (rule_set.apply (c, lookup_context));
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
@@ -1548,7 +1544,7 @@ struct ContextFormat1
struct ContextFormat2
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
if (!(this+coverage).intersects (glyphs))
return false;
@@ -1569,7 +1565,7 @@ struct ContextFormat2
return false;
}
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
if (!(this+coverage).intersects (c->glyphs))
@@ -1590,7 +1586,7 @@ struct ContextFormat2
}
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
(this+coverage).add_coverage (c->input);
@@ -1606,7 +1602,7 @@ struct ContextFormat2
(this+ruleSet[i]).collect_glyphs (c, lookup_context);
}
- inline bool would_apply (hb_would_apply_context_t *c) const
+ bool would_apply (hb_would_apply_context_t *c) const
{
TRACE_WOULD_APPLY (this);
@@ -1620,10 +1616,9 @@ struct ContextFormat2
return_trace (rule_set.would_apply (c, lookup_context));
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
@@ -1639,14 +1634,14 @@ struct ContextFormat2
return_trace (rule_set.apply (c, lookup_context));
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (coverage.sanitize (c, this) && classDef.sanitize (c, this) && ruleSet.sanitize (c, this));
@@ -1670,7 +1665,7 @@ struct ContextFormat2
struct ContextFormat3
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
if (!(this+coverageZ[0]).intersects (glyphs))
return false;
@@ -1684,7 +1679,7 @@ struct ContextFormat3
lookup_context);
}
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
if (!(this+coverageZ[0]).intersects (c->glyphs))
@@ -1701,7 +1696,7 @@ struct ContextFormat3
lookup_context);
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
(this+coverageZ[0]).add_coverage (c->input);
@@ -1718,7 +1713,7 @@ struct ContextFormat3
lookup_context);
}
- inline bool would_apply (hb_would_apply_context_t *c) const
+ bool would_apply (hb_would_apply_context_t *c) const
{
TRACE_WOULD_APPLY (this);
@@ -1730,10 +1725,9 @@ struct ContextFormat3
return_trace (context_would_apply_lookup (c, glyphCount, (const HBUINT16 *) (coverageZ.arrayZ + 1), lookupCount, lookupRecord, lookup_context));
}
- inline const Coverage &get_coverage (void) const
- { return this+coverageZ[0]; }
+ const Coverage &get_coverage () const { return this+coverageZ[0]; }
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
unsigned int index = (this+coverageZ[0]).get_coverage (c->buffer->cur().codepoint);
@@ -1747,14 +1741,14 @@ struct ContextFormat3
return_trace (context_apply_lookup (c, glyphCount, (const HBUINT16 *) (coverageZ.arrayZ + 1), lookupCount, lookupRecord, lookup_context));
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!c->check_struct (this)) return_trace (false);
@@ -1785,7 +1779,7 @@ struct ContextFormat3
struct Context
{
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
@@ -1942,7 +1936,7 @@ static inline bool chain_context_apply_lookup (hb_ot_apply_context_t *c,
struct ChainRule
{
- inline bool intersects (const hb_set_t *glyphs, ChainContextClosureLookupContext &lookup_context) const
+ bool intersects (const hb_set_t *glyphs, ChainContextClosureLookupContext &lookup_context) const
{
const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16> > (backtrack);
const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16> > (input);
@@ -1953,7 +1947,8 @@ struct ChainRule
lookup_context);
}
- inline void closure (hb_closure_context_t *c, ChainContextClosureLookupContext &lookup_context) const
+ void closure (hb_closure_context_t *c,
+ ChainContextClosureLookupContext &lookup_context) const
{
TRACE_CLOSURE (this);
const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16> > (backtrack);
@@ -1967,7 +1962,8 @@ struct ChainRule
lookup_context);
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c, ChainContextCollectGlyphsLookupContext &lookup_context) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c,
+ ChainContextCollectGlyphsLookupContext &lookup_context) const
{
TRACE_COLLECT_GLYPHS (this);
const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16> > (backtrack);
@@ -1981,7 +1977,8 @@ struct ChainRule
lookup_context);
}
- inline bool would_apply (hb_would_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
+ bool would_apply (hb_would_apply_context_t *c,
+ ChainContextApplyLookupContext &lookup_context) const
{
TRACE_WOULD_APPLY (this);
const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16> > (backtrack);
@@ -1994,7 +1991,7 @@ struct ChainRule
lookup.arrayZ, lookup_context));
}
- inline bool apply (hb_ot_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
+ bool apply (hb_ot_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
{
TRACE_APPLY (this);
const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16> > (backtrack);
@@ -2007,7 +2004,7 @@ struct ChainRule
lookup.arrayZ, lookup_context));
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!backtrack.sanitize (c)) return_trace (false);
@@ -2039,7 +2036,7 @@ struct ChainRule
struct ChainRuleSet
{
- inline bool intersects (const hb_set_t *glyphs, ChainContextClosureLookupContext &lookup_context) const
+ bool intersects (const hb_set_t *glyphs, ChainContextClosureLookupContext &lookup_context) const
{
unsigned int num_rules = rule.len;
for (unsigned int i = 0; i < num_rules; i++)
@@ -2047,7 +2044,7 @@ struct ChainRuleSet
return true;
return false;
}
- inline void closure (hb_closure_context_t *c, ChainContextClosureLookupContext &lookup_context) const
+ void closure (hb_closure_context_t *c, ChainContextClosureLookupContext &lookup_context) const
{
TRACE_CLOSURE (this);
unsigned int num_rules = rule.len;
@@ -2055,7 +2052,7 @@ struct ChainRuleSet
(this+rule[i]).closure (c, lookup_context);
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c, ChainContextCollectGlyphsLookupContext &lookup_context) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c, ChainContextCollectGlyphsLookupContext &lookup_context) const
{
TRACE_COLLECT_GLYPHS (this);
unsigned int num_rules = rule.len;
@@ -2063,7 +2060,7 @@ struct ChainRuleSet
(this+rule[i]).collect_glyphs (c, lookup_context);
}
- inline bool would_apply (hb_would_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
+ bool would_apply (hb_would_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
{
TRACE_WOULD_APPLY (this);
unsigned int num_rules = rule.len;
@@ -2074,7 +2071,7 @@ struct ChainRuleSet
return_trace (false);
}
- inline bool apply (hb_ot_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
+ bool apply (hb_ot_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
{
TRACE_APPLY (this);
unsigned int num_rules = rule.len;
@@ -2085,7 +2082,7 @@ struct ChainRuleSet
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (rule.sanitize (c, this));
@@ -2101,7 +2098,7 @@ struct ChainRuleSet
struct ChainContextFormat1
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
struct ChainContextClosureLookupContext lookup_context = {
{intersects_glyph},
@@ -2120,7 +2117,7 @@ struct ChainContextFormat1
return false;
}
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
@@ -2139,7 +2136,7 @@ struct ChainContextFormat1
}
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
(this+coverage).add_coverage (c->input);
@@ -2154,7 +2151,7 @@ struct ChainContextFormat1
(this+ruleSet[i]).collect_glyphs (c, lookup_context);
}
- inline bool would_apply (hb_would_apply_context_t *c) const
+ bool would_apply (hb_would_apply_context_t *c) const
{
TRACE_WOULD_APPLY (this);
@@ -2166,10 +2163,9 @@ struct ChainContextFormat1
return_trace (rule_set.would_apply (c, lookup_context));
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
@@ -2183,14 +2179,14 @@ struct ChainContextFormat1
return_trace (rule_set.apply (c, lookup_context));
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
@@ -2210,7 +2206,7 @@ struct ChainContextFormat1
struct ChainContextFormat2
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
if (!(this+coverage).intersects (glyphs))
return false;
@@ -2234,7 +2230,7 @@ struct ChainContextFormat2
return false;
}
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
if (!(this+coverage).intersects (c->glyphs))
@@ -2259,7 +2255,7 @@ struct ChainContextFormat2
}
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
(this+coverage).add_coverage (c->input);
@@ -2280,7 +2276,7 @@ struct ChainContextFormat2
(this+ruleSet[i]).collect_glyphs (c, lookup_context);
}
- inline bool would_apply (hb_would_apply_context_t *c) const
+ bool would_apply (hb_would_apply_context_t *c) const
{
TRACE_WOULD_APPLY (this);
@@ -2299,10 +2295,9 @@ struct ChainContextFormat2
return_trace (rule_set.would_apply (c, lookup_context));
}
- inline const Coverage &get_coverage (void) const
- { return this+coverage; }
+ const Coverage &get_coverage () const { return this+coverage; }
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
@@ -2323,14 +2318,14 @@ struct ChainContextFormat2
return_trace (rule_set.apply (c, lookup_context));
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (coverage.sanitize (c, this) &&
@@ -2366,7 +2361,7 @@ struct ChainContextFormat2
struct ChainContextFormat3
{
- inline bool intersects (const hb_set_t *glyphs) const
+ bool intersects (const hb_set_t *glyphs) const
{
const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
@@ -2385,7 +2380,7 @@ struct ChainContextFormat3
lookup_context);
}
- inline void closure (hb_closure_context_t *c) const
+ void closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
@@ -2407,7 +2402,7 @@ struct ChainContextFormat3
lookup_context);
}
- inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
+ void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
@@ -2428,7 +2423,7 @@ struct ChainContextFormat3
lookup_context);
}
- inline bool would_apply (hb_would_apply_context_t *c) const
+ bool would_apply (hb_would_apply_context_t *c) const
{
TRACE_WOULD_APPLY (this);
@@ -2446,13 +2441,13 @@ struct ChainContextFormat3
lookup.len, lookup.arrayZ, lookup_context));
}
- inline const Coverage &get_coverage (void) const
+ const Coverage &get_coverage () const
{
const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
return this+input[0];
}
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
@@ -2473,14 +2468,14 @@ struct ChainContextFormat3
lookup.len, lookup.arrayZ, lookup_context));
}
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
// TODO(subset)
return_trace (false);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (!backtrack.sanitize (c, this)) return_trace (false);
@@ -2517,7 +2512,7 @@ struct ChainContextFormat3
struct ChainContext
{
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
@@ -2542,10 +2537,10 @@ struct ChainContext
template <typename T>
struct ExtensionFormat1
{
- inline unsigned int get_type (void) const { return extensionLookupType; }
+ unsigned int get_type () const { return extensionLookupType; }
template <typename X>
- inline const X& get_subtable (void) const
+ const X& get_subtable () const
{
unsigned int offset = extensionOffset;
if (unlikely (!offset)) return Null(typename T::SubTable);
@@ -2553,7 +2548,7 @@ struct ExtensionFormat1
}
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, format);
if (unlikely (!c->may_dispatch (this, this))) return_trace (c->no_dispatch_return_value ());
@@ -2561,7 +2556,7 @@ struct ExtensionFormat1
}
/* This is called from may_dispatch() above with hb_sanitize_context_t. */
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -2583,7 +2578,7 @@ struct ExtensionFormat1
template <typename T>
struct Extension
{
- inline unsigned int get_type (void) const
+ unsigned int get_type () const
{
switch (u.format) {
case 1: return u.format1.get_type ();
@@ -2591,7 +2586,7 @@ struct Extension
}
}
template <typename X>
- inline const X& get_subtable (void) const
+ const X& get_subtable () const
{
switch (u.format) {
case 1: return u.format1.template get_subtable<typename T::SubTable> ();
@@ -2600,7 +2595,7 @@ struct Extension
}
template <typename context_t>
- inline typename context_t::return_t dispatch (context_t *c) const
+ typename context_t::return_t dispatch (context_t *c) const
{
TRACE_DISPATCH (this, u.format);
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
@@ -2625,7 +2620,7 @@ struct Extension
struct hb_ot_layout_lookup_accelerator_t
{
template <typename TLookup>
- inline void init (const TLookup &lookup)
+ void init (const TLookup &lookup)
{
digest.init ();
lookup.add_coverage (&digest);
@@ -2634,15 +2629,12 @@ struct hb_ot_layout_lookup_accelerator_t
OT::hb_get_subtables_context_t c_get_subtables (subtables);
lookup.dispatch (&c_get_subtables);
}
- inline void fini (void)
- {
- subtables.fini ();
- }
+ void fini () { subtables.fini (); }
- inline bool may_have (hb_codepoint_t g) const
+ bool may_have (hb_codepoint_t g) const
{ return digest.may_have (g); }
- inline bool apply (hb_ot_apply_context_t *c) const
+ bool apply (hb_ot_apply_context_t *c) const
{
for (unsigned int i = 0; i < subtables.len; i++)
if (subtables[i].apply (c))
@@ -2657,43 +2649,43 @@ struct hb_ot_layout_lookup_accelerator_t
struct GSUBGPOS
{
- inline bool has_data (void) const { return version.to_int (); }
- inline unsigned int get_script_count (void) const
+ bool has_data () const { return version.to_int (); }
+ unsigned int get_script_count () const
{ return (this+scriptList).len; }
- inline const Tag& get_script_tag (unsigned int i) const
+ const Tag& get_script_tag (unsigned int i) const
{ return (this+scriptList).get_tag (i); }
- inline unsigned int get_script_tags (unsigned int start_offset,
- unsigned int *script_count /* IN/OUT */,
- hb_tag_t *script_tags /* OUT */) const
+ unsigned int get_script_tags (unsigned int start_offset,
+ unsigned int *script_count /* IN/OUT */,
+ hb_tag_t *script_tags /* OUT */) const
{ return (this+scriptList).get_tags (start_offset, script_count, script_tags); }
- inline const Script& get_script (unsigned int i) const
+ const Script& get_script (unsigned int i) const
{ return (this+scriptList)[i]; }
- inline bool find_script_index (hb_tag_t tag, unsigned int *index) const
+ bool find_script_index (hb_tag_t tag, unsigned int *index) const
{ return (this+scriptList).find_index (tag, index); }
- inline unsigned int get_feature_count (void) const
+ unsigned int get_feature_count () const
{ return (this+featureList).len; }
- inline hb_tag_t get_feature_tag (unsigned int i) const
+ hb_tag_t get_feature_tag (unsigned int i) const
{ return i == Index::NOT_FOUND_INDEX ? HB_TAG_NONE : (this+featureList).get_tag (i); }
- inline unsigned int get_feature_tags (unsigned int start_offset,
- unsigned int *feature_count /* IN/OUT */,
- hb_tag_t *feature_tags /* OUT */) const
+ unsigned int get_feature_tags (unsigned int start_offset,
+ unsigned int *feature_count /* IN/OUT */,
+ hb_tag_t *feature_tags /* OUT */) const
{ return (this+featureList).get_tags (start_offset, feature_count, feature_tags); }
- inline const Feature& get_feature (unsigned int i) const
+ const Feature& get_feature (unsigned int i) const
{ return (this+featureList)[i]; }
- inline bool find_feature_index (hb_tag_t tag, unsigned int *index) const
+ bool find_feature_index (hb_tag_t tag, unsigned int *index) const
{ return (this+featureList).find_index (tag, index); }
- inline unsigned int get_lookup_count (void) const
+ unsigned int get_lookup_count () const
{ return (this+lookupList).len; }
- inline const Lookup& get_lookup (unsigned int i) const
+ const Lookup& get_lookup (unsigned int i) const
{ return (this+lookupList)[i]; }
- inline bool find_variations_index (const int *coords, unsigned int num_coords,
- unsigned int *index) const
+ bool find_variations_index (const int *coords, unsigned int num_coords,
+ unsigned int *index) const
{ return (version.to_int () >= 0x00010001u ? this+featureVars : Null(FeatureVariations))
.find_index (coords, num_coords, index); }
- inline const Feature& get_feature_variation (unsigned int feature_index,
+ const Feature& get_feature_variation (unsigned int feature_index,
unsigned int variations_index) const
{
if (FeatureVariations::NOT_FOUND_INDEX != variations_index &&
@@ -2708,11 +2700,12 @@ struct GSUBGPOS
}
template <typename TLookup>
- inline bool subset (hb_subset_context_t *c) const
+ bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
struct GSUBGPOS *out = c->serializer->embed (*this);
if (unlikely (!out)) return_trace (false);
+
out->scriptList.serialize_subset (c, this+scriptList, out);
out->featureList.serialize_subset (c, this+featureList, out);
@@ -2725,17 +2718,18 @@ struct GSUBGPOS
if (version.to_int () >= 0x00010001u)
out->featureVars.serialize_subset (c, this+featureVars, out);
+
return_trace (true);
}
- inline unsigned int get_size (void) const
+ unsigned int get_size () const
{
return min_size +
(version.to_int () >= 0x00010001u ? featureVars.static_size : 0);
}
template <typename TLookup>
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
typedef OffsetListOf<TLookup> TLookupList;
@@ -2750,7 +2744,7 @@ struct GSUBGPOS
template <typename T>
struct accelerator_t
{
- inline void init (hb_face_t *face)
+ void init (hb_face_t *face)
{
this->table = hb_sanitize_context_t().reference_table<T> (face);
if (unlikely (this->table->is_blacklisted (this->table.get_blob (), face)))
@@ -2769,7 +2763,7 @@ struct GSUBGPOS
this->accels[i].init (table->get_lookup (i));
}
- inline void fini (void)
+ void fini ()
{
for (unsigned int i = 0; i < this->lookup_count; i++)
this->accels[i].fini ();
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-jstf-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-jstf-table.hh
index 2fb23cbc32d..3beedc49b40 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-jstf-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-jstf-table.hh
@@ -54,7 +54,7 @@ typedef OffsetListOf<PosLookup> JstfMax;
struct JstfPriority
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -123,8 +123,8 @@ struct JstfPriority
struct JstfLangSys : OffsetListOf<JstfPriority>
{
- inline bool sanitize (hb_sanitize_context_t *c,
- const Record_sanitize_closure_t * = nullptr) const
+ bool sanitize (hb_sanitize_context_t *c,
+ const Record_sanitize_closure_t * = nullptr) const
{
TRACE_SANITIZE (this);
return_trace (OffsetListOf<JstfPriority>::sanitize (c));
@@ -145,27 +145,27 @@ typedef SortedArrayOf<GlyphID> ExtenderGlyphs;
struct JstfScript
{
- inline unsigned int get_lang_sys_count (void) const
+ unsigned int get_lang_sys_count () const
{ return langSys.len; }
- inline const Tag& get_lang_sys_tag (unsigned int i) const
+ const Tag& get_lang_sys_tag (unsigned int i) const
{ return langSys.get_tag (i); }
- inline unsigned int get_lang_sys_tags (unsigned int start_offset,
- unsigned int *lang_sys_count /* IN/OUT */,
- hb_tag_t *lang_sys_tags /* OUT */) const
+ unsigned int get_lang_sys_tags (unsigned int start_offset,
+ unsigned int *lang_sys_count /* IN/OUT */,
+ hb_tag_t *lang_sys_tags /* OUT */) const
{ return langSys.get_tags (start_offset, lang_sys_count, lang_sys_tags); }
- inline const JstfLangSys& get_lang_sys (unsigned int i) const
+ const JstfLangSys& get_lang_sys (unsigned int i) const
{
if (i == Index::NOT_FOUND_INDEX) return get_default_lang_sys ();
return this+langSys[i].offset;
}
- inline bool find_lang_sys_index (hb_tag_t tag, unsigned int *index) const
+ bool find_lang_sys_index (hb_tag_t tag, unsigned int *index) const
{ return langSys.find_index (tag, index); }
- inline bool has_default_lang_sys (void) const { return defaultLangSys != 0; }
- inline const JstfLangSys& get_default_lang_sys (void) const { return this+defaultLangSys; }
+ bool has_default_lang_sys () const { return defaultLangSys != 0; }
+ const JstfLangSys& get_default_lang_sys () const { return this+defaultLangSys; }
- inline bool sanitize (hb_sanitize_context_t *c,
- const Record_sanitize_closure_t * = nullptr) const
+ bool sanitize (hb_sanitize_context_t *c,
+ const Record_sanitize_closure_t * = nullptr) const
{
TRACE_SANITIZE (this);
return_trace (extenderGlyphs.sanitize (c, this) &&
@@ -195,22 +195,22 @@ struct JstfScript
struct JSTF
{
- static const hb_tag_t tableTag = HB_OT_TAG_JSTF;
+ enum { tableTag = HB_OT_TAG_JSTF };
- inline unsigned int get_script_count (void) const
+ unsigned int get_script_count () const
{ return scriptList.len; }
- inline const Tag& get_script_tag (unsigned int i) const
+ const Tag& get_script_tag (unsigned int i) const
{ return scriptList.get_tag (i); }
- inline unsigned int get_script_tags (unsigned int start_offset,
- unsigned int *script_count /* IN/OUT */,
- hb_tag_t *script_tags /* OUT */) const
+ unsigned int get_script_tags (unsigned int start_offset,
+ unsigned int *script_count /* IN/OUT */,
+ hb_tag_t *script_tags /* OUT */) const
{ return scriptList.get_tags (start_offset, script_count, script_tags); }
- inline const JstfScript& get_script (unsigned int i) const
+ const JstfScript& get_script (unsigned int i) const
{ return this+scriptList[i].offset; }
- inline bool find_script_index (hb_tag_t tag, unsigned int *index) const
+ bool find_script_index (hb_tag_t tag, unsigned int *index) const
{ return scriptList.find_index (tag, index); }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (version.sanitize (c) &&
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 d0b22efe312..67ce9235349 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
@@ -35,11 +35,12 @@
#include "hb-map.hh"
#include "hb-ot-kern-table.hh"
+#include "hb-ot-gasp-table.hh" // Just so we compile it; unused otherwise.
#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-base-table.hh" // Just so we compile it; unused otherwise
-#include "hb-ot-layout-jstf-table.hh" // Just so we compile it; unused otherwise
+#include "hb-ot-layout-base-table.hh" // Just so we compile it; unused otherwise.
+#include "hb-ot-layout-jstf-table.hh" // Just so we compile it; unused otherwise.
#include "hb-ot-name-table.hh"
#include "hb-ot-os2-table.hh"
@@ -1299,7 +1300,7 @@ hb_ot_layout_feature_get_characters (hb_face_t *face,
struct GSUBProxy
{
enum { table_index = 0 };
- static const bool inplace = false;
+ enum { inplace = false };
typedef OT::SubstLookup Lookup;
GSUBProxy (hb_face_t *face) :
@@ -1313,7 +1314,7 @@ struct GSUBProxy
struct GPOSProxy
{
enum { table_index = 1 };
- static const bool inplace = true;
+ enum { inplace = true };
typedef OT::PosLookup Lookup;
GPOSProxy (hb_face_t *face) :
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 95f794ab4a2..884202cb1e2 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
@@ -68,7 +68,7 @@ hb_ot_map_builder_t::hb_ot_map_builder_t (hb_face_t *face_,
}
}
-hb_ot_map_builder_t::~hb_ot_map_builder_t (void)
+hb_ot_map_builder_t::~hb_ot_map_builder_t ()
{
feature_infos.fini ();
for (unsigned int table_index = 0; table_index < 2; table_index++)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-map.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-map.hh
index 0a5a4fbcb70..35e94934019 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-map.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-map.hh
@@ -57,7 +57,7 @@ struct hb_ot_map_t
unsigned int auto_zwj : 1;
unsigned int random : 1;
- inline int cmp (const hb_tag_t tag_) const
+ int cmp (const hb_tag_t tag_) const
{ return tag_ < tag ? -1 : tag_ > tag ? 1 : 0; }
};
@@ -83,7 +83,7 @@ struct hb_ot_map_t
pause_func_t pause_func;
};
- inline void init (void)
+ void init ()
{
memset (this, 0, sizeof (*this));
@@ -94,7 +94,7 @@ struct hb_ot_map_t
stages[table_index].init ();
}
}
- inline void fini (void)
+ void fini ()
{
features.fini ();
for (unsigned int table_index = 0; table_index < 2; table_index++)
@@ -104,36 +104,42 @@ struct hb_ot_map_t
}
}
- inline hb_mask_t get_global_mask (void) const { return global_mask; }
+ hb_mask_t get_global_mask () const { return global_mask; }
- inline hb_mask_t get_mask (hb_tag_t feature_tag, unsigned int *shift = nullptr) const {
+ hb_mask_t get_mask (hb_tag_t feature_tag, unsigned int *shift = nullptr) const
+ {
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 {
+ bool needs_fallback (hb_tag_t feature_tag) const
+ {
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 {
+ hb_mask_t get_1_mask (hb_tag_t feature_tag) const
+ {
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 {
+ unsigned int get_feature_index (unsigned int table_index, hb_tag_t feature_tag) const
+ {
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 {
+ unsigned int get_feature_stage (unsigned int table_index, hb_tag_t feature_tag) const
+ {
const feature_map_t *map = features.bsearch (feature_tag);
return map ? map->stage[table_index] : (unsigned int) -1;
}
- inline void get_stage_lookups (unsigned int table_index, unsigned int stage,
- const struct lookup_map_t **plookups, unsigned int *lookup_count) const {
+ void get_stage_lookups (unsigned int table_index, unsigned int stage,
+ const struct lookup_map_t **plookups, unsigned int *lookup_count) const
+ {
if (unlikely (stage == (unsigned int) -1)) {
*plookups = nullptr;
*lookup_count = 0;
@@ -197,26 +203,26 @@ struct hb_ot_map_builder_t
HB_INTERNAL hb_ot_map_builder_t (hb_face_t *face_,
const hb_segment_properties_t *props_);
- HB_INTERNAL ~hb_ot_map_builder_t (void);
+ HB_INTERNAL ~hb_ot_map_builder_t ();
HB_INTERNAL void add_feature (hb_tag_t tag,
hb_ot_map_feature_flags_t flags=F_NONE,
unsigned int value=1);
- inline void add_feature (const hb_ot_map_feature_t &feat)
+ void add_feature (const hb_ot_map_feature_t &feat)
{ add_feature (feat.tag, feat.flags); }
- inline void enable_feature (hb_tag_t tag,
+ void enable_feature (hb_tag_t tag,
hb_ot_map_feature_flags_t flags=F_NONE,
unsigned int value=1)
{ add_feature (tag, F_GLOBAL | flags, value); }
- inline void disable_feature (hb_tag_t tag)
+ void disable_feature (hb_tag_t tag)
{ add_feature (tag, F_GLOBAL, 0); }
- inline void add_gsub_pause (hb_ot_map_t::pause_func_t pause_func)
+ void add_gsub_pause (hb_ot_map_t::pause_func_t pause_func)
{ add_pause (0, pause_func); }
- inline void add_gpos_pause (hb_ot_map_t::pause_func_t pause_func)
+ void add_gpos_pause (hb_ot_map_t::pause_func_t pause_func)
{ add_pause (1, pause_func); }
HB_INTERNAL void compile (hb_ot_map_t &m,
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-math-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-math-table.hh
index 153a417959d..120ab065465 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-math-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-math-table.hh
@@ -36,12 +36,12 @@ namespace OT {
struct MathValueRecord
{
- inline hb_position_t get_x_value (hb_font_t *font, const void *base) const
+ hb_position_t get_x_value (hb_font_t *font, const void *base) const
{ return font->em_scale_x (value) + (base+deviceTable).get_x_delta (font); }
- inline hb_position_t get_y_value (hb_font_t *font, const void *base) const
+ hb_position_t get_y_value (hb_font_t *font, const void *base) const
{ return font->em_scale_y (value) + (base+deviceTable).get_y_delta (font); }
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && deviceTable.sanitize (c, base));
@@ -59,7 +59,7 @@ struct MathValueRecord
struct MathConstants
{
- inline bool sanitize_math_value_records (hb_sanitize_context_t *c) const
+ bool sanitize_math_value_records (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -71,13 +71,13 @@ struct MathConstants
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && sanitize_math_value_records (c));
}
- inline hb_position_t get_value (hb_ot_math_constant_t constant,
+ hb_position_t get_value (hb_ot_math_constant_t constant,
hb_font_t *font) const
{
switch (constant) {
@@ -165,7 +165,7 @@ struct MathConstants
struct MathItalicsCorrectionInfo
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -173,8 +173,8 @@ struct MathItalicsCorrectionInfo
italicsCorrection.sanitize (c, this));
}
- inline hb_position_t get_value (hb_codepoint_t glyph,
- hb_font_t *font) const
+ hb_position_t get_value (hb_codepoint_t glyph,
+ hb_font_t *font) const
{
unsigned int index = (this+coverage).get_coverage (glyph);
return italicsCorrection[index].get_x_value (font, this);
@@ -196,7 +196,7 @@ struct MathItalicsCorrectionInfo
struct MathTopAccentAttachment
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -204,8 +204,8 @@ struct MathTopAccentAttachment
topAccentAttachment.sanitize (c, this));
}
- inline hb_position_t get_value (hb_codepoint_t glyph,
- hb_font_t *font) const
+ hb_position_t get_value (hb_codepoint_t glyph,
+ hb_font_t *font) const
{
unsigned int index = (this+topAccentCoverage).get_coverage (glyph);
if (index == NOT_COVERED)
@@ -229,7 +229,7 @@ struct MathTopAccentAttachment
struct MathKern
{
- inline bool sanitize_math_value_records (hb_sanitize_context_t *c) const
+ bool sanitize_math_value_records (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
unsigned int count = 2 * heightCount + 1;
@@ -238,7 +238,7 @@ struct MathKern
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -246,7 +246,7 @@ struct MathKern
sanitize_math_value_records (c));
}
- inline hb_position_t get_value (hb_position_t correction_height, hb_font_t *font) const
+ hb_position_t get_value (hb_position_t correction_height, hb_font_t *font) const
{
const MathValueRecord* correctionHeight = mathValueRecordsZ.arrayZ;
const MathValueRecord* kernValue = mathValueRecordsZ.arrayZ + heightCount;
@@ -294,7 +294,7 @@ struct MathKern
struct MathKernInfoRecord
{
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
@@ -306,10 +306,10 @@ struct MathKernInfoRecord
return_trace (true);
}
- inline hb_position_t get_kerning (hb_ot_math_kern_t kern,
- hb_position_t correction_height,
- hb_font_t *font,
- const void *base) const
+ hb_position_t get_kerning (hb_ot_math_kern_t kern,
+ hb_position_t correction_height,
+ hb_font_t *font,
+ const void *base) const
{
unsigned int idx = kern;
if (unlikely (idx >= ARRAY_LENGTH (mathKern))) return 0;
@@ -327,7 +327,7 @@ struct MathKernInfoRecord
struct MathKernInfo
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -335,10 +335,10 @@ struct MathKernInfo
mathKernInfoRecords.sanitize (c, this));
}
- inline hb_position_t get_kerning (hb_codepoint_t glyph,
- hb_ot_math_kern_t kern,
- hb_position_t correction_height,
- hb_font_t *font) const
+ hb_position_t get_kerning (hb_codepoint_t glyph,
+ hb_ot_math_kern_t kern,
+ hb_position_t correction_height,
+ hb_font_t *font) const
{
unsigned int index = (this+mathKernCoverage).get_coverage (glyph);
return mathKernInfoRecords[index].get_kerning (kern, correction_height, font, this);
@@ -361,7 +361,7 @@ struct MathKernInfo
struct MathGlyphInfo
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -371,21 +371,21 @@ struct MathGlyphInfo
mathKernInfo.sanitize (c, this));
}
- inline hb_position_t
+ hb_position_t
get_italics_correction (hb_codepoint_t glyph, hb_font_t *font) const
{ return (this+mathItalicsCorrectionInfo).get_value (glyph, font); }
- inline hb_position_t
+ hb_position_t
get_top_accent_attachment (hb_codepoint_t glyph, hb_font_t *font) const
{ return (this+mathTopAccentAttachment).get_value (glyph, font); }
- inline bool is_extended_shape (hb_codepoint_t glyph) const
+ bool is_extended_shape (hb_codepoint_t glyph) const
{ return (this+extendedShapeCoverage).get_coverage (glyph) != NOT_COVERED; }
- inline hb_position_t get_kerning (hb_codepoint_t glyph,
- hb_ot_math_kern_t kern,
- hb_position_t correction_height,
- hb_font_t *font) const
+ hb_position_t get_kerning (hb_codepoint_t glyph,
+ hb_ot_math_kern_t kern,
+ hb_position_t correction_height,
+ hb_font_t *font) const
{ return (this+mathKernInfo).get_kerning (glyph, kern, correction_height, font); }
protected:
@@ -416,7 +416,7 @@ struct MathGlyphVariantRecord
{
friend struct MathGlyphConstruction;
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -446,15 +446,15 @@ struct PartFlags : HBUINT16
struct MathGlyphPartRecord
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
}
- inline void extract (hb_ot_math_glyph_part_t &out,
- int scale,
- hb_font_t *font) const
+ void extract (hb_ot_math_glyph_part_t &out,
+ int scale,
+ hb_font_t *font) const
{
out.glyph = glyph;
@@ -491,7 +491,7 @@ struct MathGlyphPartRecord
struct MathGlyphAssembly
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -499,12 +499,12 @@ struct MathGlyphAssembly
partRecords.sanitize (c));
}
- inline unsigned int get_parts (hb_direction_t direction,
- hb_font_t *font,
- unsigned int start_offset,
- unsigned int *parts_count, /* IN/OUT */
- hb_ot_math_glyph_part_t *parts /* OUT */,
- hb_position_t *italics_correction /* OUT */) const
+ unsigned int get_parts (hb_direction_t direction,
+ hb_font_t *font,
+ unsigned int start_offset,
+ unsigned int *parts_count, /* IN/OUT */
+ hb_ot_math_glyph_part_t *parts /* OUT */,
+ hb_position_t *italics_correction /* OUT */) const
{
if (parts_count)
{
@@ -535,7 +535,7 @@ struct MathGlyphAssembly
struct MathGlyphConstruction
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -543,14 +543,13 @@ struct MathGlyphConstruction
mathGlyphVariantRecord.sanitize (c));
}
- inline const MathGlyphAssembly &get_assembly (void) const
- { return this+glyphAssembly; }
+ const MathGlyphAssembly &get_assembly () const { return this+glyphAssembly; }
- inline unsigned int get_variants (hb_direction_t direction,
- hb_font_t *font,
- unsigned int start_offset,
- unsigned int *variants_count, /* IN/OUT */
- hb_ot_math_glyph_variant_t *variants /* OUT */) const
+ unsigned int get_variants (hb_direction_t direction,
+ hb_font_t *font,
+ unsigned int start_offset,
+ unsigned int *variants_count, /* IN/OUT */
+ hb_ot_math_glyph_variant_t *variants /* OUT */) const
{
if (variants_count)
{
@@ -580,7 +579,7 @@ struct MathGlyphConstruction
struct MathVariants
{
- inline bool sanitize_offsets (hb_sanitize_context_t *c) const
+ bool sanitize_offsets (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
unsigned int count = vertGlyphCount + horizGlyphCount;
@@ -589,7 +588,7 @@ struct MathVariants
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -599,20 +598,20 @@ struct MathVariants
sanitize_offsets (c));
}
- inline hb_position_t get_min_connector_overlap (hb_direction_t direction,
+ hb_position_t get_min_connector_overlap (hb_direction_t direction,
hb_font_t *font) const
{ return font->em_scale_dir (minConnectorOverlap, direction); }
- inline unsigned int get_glyph_variants (hb_codepoint_t glyph,
- hb_direction_t direction,
- hb_font_t *font,
- unsigned int start_offset,
- unsigned int *variants_count, /* IN/OUT */
- hb_ot_math_glyph_variant_t *variants /* OUT */) const
+ unsigned int get_glyph_variants (hb_codepoint_t glyph,
+ hb_direction_t direction,
+ hb_font_t *font,
+ unsigned int start_offset,
+ unsigned int *variants_count, /* IN/OUT */
+ hb_ot_math_glyph_variant_t *variants /* OUT */) const
{ return get_glyph_construction (glyph, direction, font)
.get_variants (direction, font, start_offset, variants_count, variants); }
- inline unsigned int get_glyph_parts (hb_codepoint_t glyph,
+ unsigned int get_glyph_parts (hb_codepoint_t glyph,
hb_direction_t direction,
hb_font_t *font,
unsigned int start_offset,
@@ -626,10 +625,10 @@ struct MathVariants
italics_correction); }
private:
- inline const MathGlyphConstruction &
- get_glyph_construction (hb_codepoint_t glyph,
- hb_direction_t direction,
- hb_font_t *font HB_UNUSED) const
+ const MathGlyphConstruction &
+ get_glyph_construction (hb_codepoint_t glyph,
+ hb_direction_t direction,
+ hb_font_t *font HB_UNUSED) const
{
bool vertical = HB_DIRECTION_IS_VERTICAL (direction);
unsigned int count = vertical ? vertGlyphCount : horizGlyphCount;
@@ -680,11 +679,11 @@ struct MathVariants
struct MATH
{
- static const hb_tag_t tableTag = HB_OT_TAG_MATH;
+ enum { tableTag = HB_OT_TAG_MATH };
- inline bool has_data (void) const { return version.to_int (); }
+ bool has_data () const { return version.to_int (); }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (version.sanitize (c) &&
@@ -694,15 +693,13 @@ struct MATH
mathVariants.sanitize (c, this));
}
- inline hb_position_t get_constant (hb_ot_math_constant_t constant,
+ hb_position_t get_constant (hb_ot_math_constant_t constant,
hb_font_t *font) const
{ return (this+mathConstants).get_value (constant, font); }
- inline const MathGlyphInfo &get_glyph_info (void) const
- { return this+mathGlyphInfo; }
+ const MathGlyphInfo &get_glyph_info () const { return this+mathGlyphInfo; }
- inline const MathVariants &get_variants (void) const
- { return this+mathVariants; }
+ const MathVariants &get_variants () const { return this+mathVariants; }
protected:
FixedVersion<>version; /* Version of the MATH table
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 198dd2518c3..ba474fd585d 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
@@ -41,7 +41,7 @@ namespace OT {
struct maxpV1Tail
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -71,19 +71,16 @@ struct maxpV1Tail
struct maxp
{
- static const hb_tag_t tableTag = HB_OT_TAG_maxp;
+ enum { tableTag = HB_OT_TAG_maxp };
- inline unsigned int get_num_glyphs (void) const
- {
- return numGlyphs;
- }
+ unsigned int get_num_glyphs () const { return numGlyphs; }
- inline void set_num_glyphs (unsigned int count)
+ void set_num_glyphs (unsigned int count)
{
numGlyphs.set (count);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!c->check_struct (this)))
@@ -97,7 +94,7 @@ struct maxp
return_trace (likely (version.major == 0 && version.minor == 0x5000u));
}
- inline bool subset (hb_subset_plan_t *plan) const
+ bool subset (hb_subset_plan_t *plan) const
{
hb_blob_t *maxp_blob = hb_sanitize_context_t().reference_table<maxp> (plan->source);
hb_blob_t *maxp_prime_blob = hb_blob_copy_writable_or_fail (maxp_blob);
@@ -117,7 +114,7 @@ struct maxp
return result;
}
- static inline void drop_hint_fields (hb_subset_plan_t *plan HB_UNUSED, maxp *maxp_prime)
+ static void drop_hint_fields (hb_subset_plan_t *plan HB_UNUSED, maxp *maxp_prime)
{
if (maxp_prime->version.major == 1)
{
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name-table.hh
index ab07b7196ad..705ae0e9215 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name-table.hh
@@ -49,7 +49,7 @@ namespace OT {
struct NameRecord
{
- inline hb_language_t language (hb_face_t *face) const
+ hb_language_t language (hb_face_t *face) const
{
unsigned int p = platformID;
unsigned int l = languageID;
@@ -66,7 +66,7 @@ struct NameRecord
return HB_LANGUAGE_INVALID;
}
- inline uint16_t score (void) const
+ uint16_t score () const
{
/* Same order as in cmap::find_best_subtable(). */
unsigned int p = platformID;
@@ -93,7 +93,7 @@ struct NameRecord
return UNSUPPORTED;
}
- inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
/* We can check from base all the way up to the end of string... */
@@ -151,12 +151,13 @@ _hb_ot_name_entry_cmp (const void *pa, const void *pb)
struct name
{
- static const hb_tag_t tableTag = HB_OT_TAG_name;
+ enum { tableTag = HB_OT_TAG_name };
- inline unsigned int get_size (void) const
- { return min_size + count * nameRecordZ[0].min_size; }
+ unsigned int get_size () const
+ { return min_size + count * nameRecordZ.item_size; }
- inline bool sanitize_records (hb_sanitize_context_t *c) const {
+ bool sanitize_records (hb_sanitize_context_t *c) const
+ {
TRACE_SANITIZE (this);
const void *string_pool = (this+stringOffset).arrayZ;
unsigned int _count = count;
@@ -166,7 +167,7 @@ struct name
return_trace (true);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -177,11 +178,11 @@ struct name
struct accelerator_t
{
- inline void init (hb_face_t *face)
+ void init (hb_face_t *face)
{
this->table = hb_sanitize_context_t().reference_table<name> (face);
assert (this->table.get_length () >= this->table->stringOffset);
- this->pool = (this->table+this->table->stringOffset).arrayZ;
+ this->pool = (const char *) (const void *) (this->table+this->table->stringOffset);
this->pool_len = this->table.get_length () - this->table->stringOffset;
const hb_array_t<const NameRecord> all_names (this->table->nameRecordZ.arrayZ,
this->table->count);
@@ -189,7 +190,7 @@ struct name
this->names.init ();
this->names.alloc (all_names.len);
- for (uint16_t i = 0; i < all_names.len; i++)
+ for (unsigned int i = 0; i < all_names.len; i++)
{
hb_ot_name_entry_t *entry = this->names.push ();
@@ -217,13 +218,13 @@ struct name
this->names.resize (j);
}
- inline void fini (void)
+ void fini ()
{
this->names.fini ();
this->table.destroy ();
}
- inline int get_index (hb_ot_name_id_t name_id,
+ int get_index (hb_ot_name_id_t name_id,
hb_language_t language,
unsigned int *width=nullptr) const
{
@@ -243,16 +244,16 @@ struct name
return entry->entry_index;
}
- inline hb_bytes_t get_name (unsigned int idx) const
+ hb_bytes_t get_name (unsigned int idx) const
{
const hb_array_t<const NameRecord> all_names (table->nameRecordZ.arrayZ, table->count);
const NameRecord &record = all_names[idx];
- const hb_array_t<const char> string_pool ((const char *) pool, pool_len);
- return string_pool.sub_array (record.offset, record.length).as_bytes ();
+ const hb_bytes_t string_pool (pool, pool_len);
+ return string_pool.sub_array (record.offset, record.length);
}
private:
- const void *pool;
+ const char *pool;
unsigned int pool_len;
public:
hb_blob_ptr_t<name> table;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name.cc
index 4c886609688..b2eda293137 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name.cc
@@ -66,12 +66,12 @@ hb_ot_name_list_names (hb_face_t *face,
template <typename in_utf_t, typename out_utf_t>
static inline unsigned int
-hb_ot_name_convert_utf (const hb_bytes_t *bytes,
+hb_ot_name_convert_utf (hb_bytes_t bytes,
unsigned int *text_size /* IN/OUT */,
typename out_utf_t::codepoint_t *text /* OUT */)
{
- unsigned int src_len = bytes->len / sizeof (typename in_utf_t::codepoint_t);
- const typename in_utf_t::codepoint_t *src = (const typename in_utf_t::codepoint_t *) bytes->arrayZ;
+ unsigned int src_len = bytes.len / sizeof (typename in_utf_t::codepoint_t);
+ const typename in_utf_t::codepoint_t *src = (const typename in_utf_t::codepoint_t *) bytes.arrayZ;
const typename in_utf_t::codepoint_t *src_end = src + src_len;
typename out_utf_t::codepoint_t *dst = text;
@@ -129,10 +129,10 @@ hb_ot_name_get_utf (hb_face_t *face,
hb_bytes_t bytes = name.get_name (idx);
if (width == 2) /* UTF16-BE */
- return hb_ot_name_convert_utf<hb_utf16_be_t, utf_t> (&bytes, text_size, text);
+ return hb_ot_name_convert_utf<hb_utf16_be_t, utf_t> (bytes, text_size, text);
if (width == 1) /* ASCII */
- return hb_ot_name_convert_utf<hb_ascii_t, utf_t> (&bytes, text_size, text);
+ return hb_ot_name_convert_utf<hb_ascii_t, utf_t> (bytes, text_size, text);
}
if (text_size)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name.h
index 8b831688427..3b4ad581c7e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-name.h
@@ -73,7 +73,7 @@ enum
HB_OT_NAME_ID_DARK_BACKGROUND = 24,
HB_OT_NAME_ID_VARIATIONS_PS_PREFIX = 25,
- HB_OT_NAME_ID_INVALID = 0xFFFF,
+ HB_OT_NAME_ID_INVALID = 0xFFFF
};
typedef unsigned int hb_ot_name_id_t;
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 a5a9c07eadb..4c1812c3229 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
@@ -1,5 +1,6 @@
/*
* Copyright © 2011,2012 Google, Inc.
+ * Copyright © 2018 Ebrahim Byagowi
*
* This is part of HarfBuzz, a text shaping library.
*
@@ -30,7 +31,7 @@
#include "hb-open-type.hh"
#include "hb-ot-os2-unicode-ranges.hh"
-namespace OT {
+#include "hb-set.hh"
/*
* OS/2 and Windows Metrics
@@ -38,17 +39,113 @@ namespace OT {
*/
#define HB_OT_TAG_OS2 HB_TAG('O','S','/','2')
-struct OS2
+
+namespace OT {
+
+struct OS2V1Tail
{
- static const hb_tag_t tableTag = HB_OT_TAG_OS2;
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ public:
+ HBUINT32 ulCodePageRange1;
+ HBUINT32 ulCodePageRange2;
+ public:
+ DEFINE_SIZE_STATIC (8);
+};
- inline bool sanitize (hb_sanitize_context_t *c) const
+struct OS2V2Tail
+{
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
}
- inline bool subset (hb_subset_plan_t *plan) const
+ public:
+ HBINT16 sxHeight;
+ HBINT16 sCapHeight;
+ HBUINT16 usDefaultChar;
+ HBUINT16 usBreakChar;
+ HBUINT16 usMaxContext;
+ public:
+ DEFINE_SIZE_STATIC (10);
+};
+
+struct OS2V5Tail
+{
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ public:
+ HBUINT16 usLowerOpticalPointSize;
+ HBUINT16 usUpperOpticalPointSize;
+ public:
+ DEFINE_SIZE_STATIC (4);
+};
+
+struct OS2
+{
+ enum { tableTag = HB_OT_TAG_OS2 };
+
+ bool has_data () const { return this != &Null (OS2); }
+
+ const OS2V1Tail &v1 () const { return version >= 1 ? v1X : Null (OS2V1Tail); }
+ const OS2V2Tail &v2 () const { return version >= 2 ? v2X : Null (OS2V2Tail); }
+ const OS2V5Tail &v5 () const { return version >= 5 ? v5X : Null (OS2V5Tail); }
+
+ enum selection_flag_t {
+ ITALIC = 1u<<0,
+ UNDERSCORE = 1u<<1,
+ NEGATIVE = 1u<<2,
+ OUTLINED = 1u<<3,
+ STRIKEOUT = 1u<<4,
+ BOLD = 1u<<5,
+ REGULAR = 1u<<6,
+ USE_TYPO_METRICS = 1u<<7,
+ WWS = 1u<<8,
+ OBLIQUE = 1u<<9
+ };
+
+ bool is_italic () const { return fsSelection & ITALIC; }
+ bool is_oblique () const { return fsSelection & OBLIQUE; }
+ bool is_typo_metrics () const { return fsSelection & USE_TYPO_METRICS; }
+
+ enum width_class_t {
+ FWIDTH_ULTRA_CONDENSED = 1, /* 50% */
+ FWIDTH_EXTRA_CONDENSED = 2, /* 62.5% */
+ FWIDTH_CONDENSED = 3, /* 75% */
+ FWIDTH_SEMI_CONDENSED = 4, /* 87.5% */
+ FWIDTH_NORMAL = 5, /* 100% */
+ FWIDTH_SEMI_EXPANDED = 6, /* 112.5% */
+ FWIDTH_EXPANDED = 7, /* 125% */
+ FWIDTH_EXTRA_EXPANDED = 8, /* 150% */
+ FWIDTH_ULTRA_EXPANDED = 9 /* 200% */
+ };
+
+ float get_width () const
+ {
+ switch (usWidthClass) {
+ case FWIDTH_ULTRA_CONDENSED:return 50.f;
+ case FWIDTH_EXTRA_CONDENSED:return 62.5f;
+ case FWIDTH_CONDENSED: return 75.f;
+ case FWIDTH_SEMI_CONDENSED: return 87.5f;
+ default:
+ case FWIDTH_NORMAL: return 100.f;
+ case FWIDTH_SEMI_EXPANDED: return 112.5f;
+ case FWIDTH_EXPANDED: return 125.f;
+ case FWIDTH_EXTRA_EXPANDED: return 150.f;
+ case FWIDTH_ULTRA_EXPANDED: return 200.f;
+ }
+ }
+
+ bool subset (hb_subset_plan_t *plan) const
{
hb_blob_t *os2_blob = hb_sanitize_context_t ().reference_table<OS2> (plan->source);
hb_blob_t *os2_prime_blob = hb_blob_create_sub_blob (os2_blob, 0, -1);
@@ -73,8 +170,8 @@ struct OS2
return result;
}
- inline void _update_unicode_ranges (const hb_set_t *codepoints,
- HBUINT32 ulUnicodeRange[4]) const
+ void _update_unicode_ranges (const hb_set_t *codepoints,
+ HBUINT32 ulUnicodeRange[4]) const
{
for (unsigned int i = 0; i < 4; i++)
ulUnicodeRange[i].set (0);
@@ -99,7 +196,7 @@ struct OS2
}
}
- static inline void find_min_and_max_codepoint (const hb_set_t *codepoints,
+ static void find_min_and_max_codepoint (const hb_set_t *codepoints,
uint16_t *min_cp, /* OUT */
uint16_t *max_cp /* OUT */)
{
@@ -118,17 +215,21 @@ struct OS2
};
// https://github.com/Microsoft/Font-Validator/blob/520aaae/OTFontFileVal/val_OS2.cs#L644-L681
- inline font_page_t get_font_page () const
+ font_page_t get_font_page () const
+ { return (font_page_t) (version == 0 ? fsSelection & 0xFF00 : 0); }
+
+ bool sanitize (hb_sanitize_context_t *c) const
{
- if (version != 0)
- return (font_page_t) 0;
- return (font_page_t) (fsSelection & 0xFF00);
+ TRACE_SANITIZE (this);
+ if (unlikely (!c->check_struct (this))) return_trace (false);
+ if (unlikely (version >= 1 && !v1X.sanitize (c))) return_trace (false);
+ if (unlikely (version >= 2 && !v2X.sanitize (c))) return_trace (false);
+ if (unlikely (version >= 5 && !v5X.sanitize (c))) return_trace (false);
+ return_trace (true);
}
public:
HBUINT16 version;
-
- /* Version 0 */
HBINT16 xAvgCharWidth;
HBUINT16 usWeightClass;
HBUINT16 usWidthClass;
@@ -155,24 +256,11 @@ struct OS2
HBINT16 sTypoLineGap;
HBUINT16 usWinAscent;
HBUINT16 usWinDescent;
-
- /* Version 1 */
- //HBUINT32 ulCodePageRange1;
- //HBUINT32 ulCodePageRange2;
-
- /* Version 2 */
- //HBINT16 sxHeight;
- //HBINT16 sCapHeight;
- //HBUINT16 usDefaultChar;
- //HBUINT16 usBreakChar;
- //HBUINT16 usMaxContext;
-
- /* Version 5 */
- //HBUINT16 usLowerOpticalPointSize;
- //HBUINT16 usUpperOpticalPointSize;
-
+ OS2V1Tail v1X;
+ OS2V2Tail v2X;
+ OS2V5Tail v5X;
public:
- DEFINE_SIZE_STATIC (78);
+ DEFINE_SIZE_MIN (78);
};
} /* namespace OT */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-post-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-post-table.hh
index 98df3e7801c..33b7070ee08 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-post-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-post-table.hh
@@ -51,7 +51,7 @@ struct postV2Tail
{
friend struct post;
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (glyphNameIndex.sanitize (c));
@@ -71,9 +71,9 @@ struct postV2Tail
struct post
{
- static const hb_tag_t tableTag = HB_OT_TAG_post;
+ enum { tableTag = HB_OT_TAG_post };
- inline bool subset (hb_subset_plan_t *plan) const
+ bool subset (hb_subset_plan_t *plan) const
{
unsigned int post_prime_length;
hb_blob_t *post_blob = hb_sanitize_context_t ().reference_table<post>(plan->source);
@@ -97,7 +97,7 @@ struct post
struct accelerator_t
{
- inline void init (hb_face_t *face)
+ void init (hb_face_t *face)
{
index_to_offset.init ();
@@ -107,7 +107,7 @@ struct post
version = table->version.to_int ();
if (version != 0x00020000) return;
- const postV2Tail &v2 = table->v2;
+ const postV2Tail &v2 = table->v2X;
glyphNameIndex = &v2.glyphNameIndex;
pool = &StructAfter<uint8_t> (v2.glyphNameIndex);
@@ -118,15 +118,15 @@ struct post
data += 1 + *data)
index_to_offset.push (data - pool);
}
- inline void fini (void)
+ void fini ()
{
index_to_offset.fini ();
free (gids_sorted_by_name.get ());
table.destroy ();
}
- inline bool get_glyph_name (hb_codepoint_t glyph,
- char *buf, unsigned int buf_len) const
+ bool get_glyph_name (hb_codepoint_t glyph,
+ char *buf, unsigned int buf_len) const
{
hb_bytes_t s = find_glyph_name (glyph);
if (!s.len) return false;
@@ -137,8 +137,8 @@ struct post
return true;
}
- inline bool get_glyph_from_name (const char *name, int len,
- hb_codepoint_t *glyph) const
+ bool get_glyph_from_name (const char *name, int len,
+ hb_codepoint_t *glyph) const
{
unsigned int count = get_glyph_count ();
if (unlikely (!count)) return false;
@@ -168,7 +168,8 @@ struct post
}
hb_bytes_t st (name, len);
- const uint16_t *gid = (const uint16_t *) hb_bsearch_r (&st, gids, count, sizeof (gids[0]), cmp_key, (void *) this);
+ const uint16_t *gid = (const uint16_t *) hb_bsearch_r (hb_addressof (st), gids, count,
+ sizeof (gids[0]), cmp_key, (void *) this);
if (gid)
{
*glyph = *gid;
@@ -180,7 +181,7 @@ struct post
protected:
- inline unsigned int get_glyph_count (void) const
+ unsigned int get_glyph_count () const
{
if (version == 0x00010000)
return NUM_FORMAT1_NAMES;
@@ -191,7 +192,7 @@ struct post
return 0;
}
- static inline int cmp_gids (const void *pa, const void *pb, void *arg)
+ static int cmp_gids (const void *pa, const void *pb, void *arg)
{
const accelerator_t *thiz = (const accelerator_t *) arg;
uint16_t a = * (const uint16_t *) pa;
@@ -199,7 +200,7 @@ struct post
return thiz->find_glyph_name (b).cmp (thiz->find_glyph_name (a));
}
- static inline int cmp_key (const void *pk, const void *po, void *arg)
+ static int cmp_key (const void *pk, const void *po, void *arg)
{
const accelerator_t *thiz = (const accelerator_t *) arg;
const hb_bytes_t *key = (const hb_bytes_t *) pk;
@@ -207,7 +208,7 @@ struct post
return thiz->find_glyph_name (o).cmp (*key);
}
- inline hb_bytes_t find_glyph_name (hb_codepoint_t glyph) const
+ hb_bytes_t find_glyph_name (hb_codepoint_t glyph) const
{
if (version == 0x00010000)
{
@@ -245,12 +246,12 @@ struct post
hb_atomic_ptr_t<uint16_t *> gids_sorted_by_name;
};
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
(version.to_int () == 0x00010000 ||
- (version.to_int () == 0x00020000 && v2.sanitize (c)) ||
+ (version.to_int () == 0x00020000 && v2X.sanitize (c)) ||
version.to_int () == 0x00030000)));
}
@@ -286,7 +287,7 @@ struct post
* is downloaded as a Type 1 font. */
HBUINT32 maxMemType1; /* Maximum memory usage when an OpenType font
* is downloaded as a Type 1 font. */
- postV2Tail v2;
+ postV2Tail v2X;
DEFINE_SIZE_MIN (32);
};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-fallback.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-fallback.hh
index 5be6f8d69e9..2a1f2f8458c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-fallback.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-fallback.hh
@@ -79,8 +79,6 @@ arabic_fallback_synthesize_lookup_single (const hb_ot_shape_plan_t *plan HB_UNUS
* May not be good-enough for presidential candidate interviews, but good-enough for us... */
hb_stable_sort (&glyphs[0], num_glyphs, (int(*)(const OT::GlyphID*, const OT::GlyphID *)) OT::GlyphID::cmp, &substitutes[0]);
- Supplier<OT::GlyphID> glyphs_supplier (glyphs, num_glyphs);
- Supplier<OT::GlyphID> substitutes_supplier (substitutes, num_glyphs);
/* Each glyph takes four bytes max, and there's some overhead. */
char buf[(SHAPING_TABLE_LAST - SHAPING_TABLE_FIRST + 1) * 4 + 128];
@@ -88,9 +86,8 @@ arabic_fallback_synthesize_lookup_single (const hb_ot_shape_plan_t *plan HB_UNUS
OT::SubstLookup *lookup = c.start_serialize<OT::SubstLookup> ();
bool ret = lookup->serialize_single (&c,
OT::LookupFlag::IgnoreMarks,
- glyphs_supplier,
- substitutes_supplier,
- num_glyphs);
+ hb_array (glyphs, num_glyphs),
+ hb_array (substitutes, num_glyphs));
c.end_serialize ();
/* TODO sanitize the results? */
@@ -155,11 +152,6 @@ arabic_fallback_synthesize_lookup_ligature (const hb_ot_shape_plan_t *plan HB_UN
if (!num_ligatures)
return nullptr;
- Supplier<OT::GlyphID> first_glyphs_supplier (first_glyphs, num_first_glyphs);
- Supplier<unsigned int > ligature_per_first_glyph_count_supplier (ligature_per_first_glyph_count_list, num_first_glyphs);
- Supplier<OT::GlyphID> ligatures_supplier (ligature_list, num_ligatures);
- Supplier<unsigned int > component_count_supplier (component_count_list, num_ligatures);
- Supplier<OT::GlyphID> component_supplier (component_list, num_ligatures);
/* 16 bytes per ligature ought to be enough... */
char buf[ARRAY_LENGTH_CONST (ligature_list) * 16 + 128];
@@ -167,12 +159,11 @@ arabic_fallback_synthesize_lookup_ligature (const hb_ot_shape_plan_t *plan HB_UN
OT::SubstLookup *lookup = c.start_serialize<OT::SubstLookup> ();
bool ret = lookup->serialize_ligature (&c,
OT::LookupFlag::IgnoreMarks,
- first_glyphs_supplier,
- ligature_per_first_glyph_count_supplier,
- num_first_glyphs,
- ligatures_supplier,
- component_count_supplier,
- component_supplier);
+ hb_array (first_glyphs, num_first_glyphs),
+ hb_array (ligature_per_first_glyph_count_list, num_first_glyphs),
+ hb_array (ligature_list, num_ligatures),
+ hb_array (component_count_list, num_ligatures),
+ hb_array (component_list, num_ligatures));
c.end_serialize ();
/* TODO sanitize the results? */
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 8933c1822a8..d2d0a5a34a6 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
@@ -226,7 +226,7 @@ override_features_indic (hb_ot_shape_planner_t *plan)
struct would_substitute_feature_t
{
- inline void init (const hb_ot_map_t *map, hb_tag_t feature_tag, bool zero_context_)
+ void init (const hb_ot_map_t *map, hb_tag_t feature_tag, bool zero_context_)
{
zero_context = zero_context_;
map->get_stage_lookups (0/*GSUB*/,
@@ -234,9 +234,9 @@ struct would_substitute_feature_t
&lookups, &count);
}
- inline bool would_substitute (const hb_codepoint_t *glyphs,
- unsigned int glyphs_count,
- hb_face_t *face) const
+ bool would_substitute (const hb_codepoint_t *glyphs,
+ unsigned int glyphs_count,
+ hb_face_t *face) const
{
for (unsigned int i = 0; i < count; i++)
if (hb_ot_layout_lookup_would_substitute_fast (face, lookups[i].index, glyphs, glyphs_count, zero_context))
@@ -252,7 +252,7 @@ struct would_substitute_feature_t
struct indic_shape_plan_t
{
- inline bool load_virama_glyph (hb_font_t *font, hb_codepoint_t *pglyph) const
+ bool load_virama_glyph (hb_font_t *font, hb_codepoint_t *pglyph) const
{
hb_codepoint_t glyph = virama_glyph.get_relaxed ();
if (unlikely (glyph == (hb_codepoint_t) -1))
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 497891ea045..4475ceb7c91 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
@@ -127,28 +127,31 @@ collect_features_khmer (hb_ot_shape_planner_t *plan)
for (; i < KHMER_NUM_FEATURES; i++)
map->add_feature (khmer_features[i]);
-
- map->enable_feature (HB_TAG('c','a','l','t'));
- map->enable_feature (HB_TAG('c','l','i','g'));
-
}
static void
override_features_khmer (hb_ot_shape_planner_t *plan)
{
+ hb_ot_map_builder_t *map = &plan->map;
+
+ /* Khmer spec has 'clig' as part of required shaping features:
+ * "Apply feature 'clig' to form ligatures that are desired for
+ * typographical correctness.", hence in overrides... */
+ map->enable_feature (HB_TAG('c','l','i','g'));
+
/* Uniscribe does not apply 'kern' in Khmer. */
if (hb_options ().uniscribe_bug_compatible)
{
- plan->map.disable_feature (HB_TAG('k','e','r','n'));
+ map->disable_feature (HB_TAG('k','e','r','n'));
}
- plan->map.disable_feature (HB_TAG('l','i','g','a'));
+ map->disable_feature (HB_TAG('l','i','g','a'));
}
struct would_substitute_feature_t
{
- inline void init (const hb_ot_map_t *map, hb_tag_t feature_tag, bool zero_context_)
+ void init (const hb_ot_map_t *map, hb_tag_t feature_tag, bool zero_context_)
{
zero_context = zero_context_;
map->get_stage_lookups (0/*GSUB*/,
@@ -156,9 +159,9 @@ struct would_substitute_feature_t
&lookups, &count);
}
- inline bool would_substitute (const hb_codepoint_t *glyphs,
- unsigned int glyphs_count,
- hb_face_t *face) const
+ bool would_substitute (const hb_codepoint_t *glyphs,
+ unsigned int glyphs_count,
+ hb_face_t *face) const
{
for (unsigned int i = 0; i < count; i++)
if (hb_ot_layout_lookup_would_substitute_fast (face, lookups[i].index, glyphs, glyphs_count, zero_context))
@@ -174,7 +177,7 @@ struct would_substitute_feature_t
struct khmer_shape_plan_t
{
- inline bool get_virama_glyph (hb_font_t *font, hb_codepoint_t *pglyph) const
+ bool get_virama_glyph (hb_font_t *font, hb_codepoint_t *pglyph) const
{
hb_codepoint_t glyph = virama_glyph;
if (unlikely (virama_glyph == (hb_codepoint_t) -1))
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 ef97435782c..6e5ce1523a3 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
@@ -189,7 +189,7 @@ hb_ot_shape_plan_t::init0 (hb_face_t *face,
}
void
-hb_ot_shape_plan_t::fini (void)
+hb_ot_shape_plan_t::fini ()
{
if (shaper->data_destroy)
shaper->data_destroy (const_cast<void *> (data));
@@ -309,9 +309,6 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
map->enable_feature (HB_TAG ('v','e','r','t'), F_GLOBAL_SEARCH);
}
- if (planner->shaper->override_features)
- planner->shaper->override_features (planner);
-
for (unsigned int i = 0; i < num_user_features; i++)
{
const hb_feature_t *feature = &user_features[i];
@@ -330,6 +327,9 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
aat_map->add_feature (feature->tag, feature->value);
}
}
+
+ if (planner->shaper->override_features)
+ planner->shaper->override_features (planner);
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.hh
index 6e1478d0085..73a11e1af5b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.hh
@@ -37,7 +37,7 @@ struct hb_ot_shape_plan_key_t
{
unsigned int variations_index[2];
- inline void init (hb_face_t *face,
+ void init (hb_face_t *face,
const int *coords,
unsigned int num_coords)
{
@@ -49,7 +49,7 @@ struct hb_ot_shape_plan_key_t
&variations_index[table_index]);
}
- inline bool equal (const hb_ot_shape_plan_key_t *other)
+ bool equal (const hb_ot_shape_plan_key_t *other)
{
return 0 == memcmp (this, other, sizeof (*this));
}
@@ -85,7 +85,7 @@ struct hb_ot_shape_plan_t
bool apply_morx : 1;
bool apply_trak : 1;
- inline void collect_lookups (hb_tag_t table_tag, hb_set_t *lookups) const
+ void collect_lookups (hb_tag_t table_tag, hb_set_t *lookups) const
{
unsigned int table_index;
switch (table_tag) {
@@ -98,7 +98,7 @@ struct hb_ot_shape_plan_t
HB_INTERNAL bool init0 (hb_face_t *face,
const hb_shape_plan_key_t *key);
- HB_INTERNAL void fini (void);
+ HB_INTERNAL void fini ();
HB_INTERNAL void substitute (hb_font_t *font, hb_buffer_t *buffer) const;
HB_INTERNAL void position (hb_font_t *font, hb_buffer_t *buffer) const;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-stat-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-stat-table.hh
index 02c376e5de2..ffab28c8b10 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-stat-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-stat-table.hh
@@ -57,28 +57,9 @@ enum
// Reserved = 0xFFFC /* Reserved for future use — set to zero. */
};
-struct StatAxisRecord
-{
- inline bool sanitize (hb_sanitize_context_t *c) const
- {
- TRACE_SANITIZE (this);
- return_trace (likely (c->check_struct (this)));
- }
-
- protected:
- Tag axisTag; /* A tag identifying the axis of design variation. */
- NameID axisNameID; /* The name ID for entries in the 'name' table that
- * provide a display string for this axis. */
- HBUINT16 axisOrdering; /* A value that applications can use to determine
- * primary sorting of face names, or for ordering
- * of descriptors when composing family or face names. */
- public:
- DEFINE_SIZE_STATIC (8);
-};
-
struct AxisValueFormat1
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -101,7 +82,7 @@ struct AxisValueFormat1
struct AxisValueFormat2
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -128,7 +109,7 @@ struct AxisValueFormat2
struct AxisValueFormat3
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -153,7 +134,7 @@ struct AxisValueFormat3
struct AxisValueRecord
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -170,7 +151,7 @@ struct AxisValueRecord
struct AxisValueFormat4
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)));
@@ -194,7 +175,7 @@ struct AxisValueFormat4
struct AxisValue
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (c->check_struct (this)))
@@ -223,11 +204,30 @@ struct AxisValue
DEFINE_SIZE_UNION (2, format);
};
+struct StatAxisRecord
+{
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (likely (c->check_struct (this)));
+ }
+
+ protected:
+ Tag tag; /* A tag identifying the axis of design variation. */
+ NameID nameID; /* The name ID for entries in the 'name' table that
+ * provide a display string for this axis. */
+ HBUINT16 ordering; /* A value that applications can use to determine
+ * primary sorting of face names, or for ordering
+ * of descriptors when composing family or face names. */
+ public:
+ DEFINE_SIZE_STATIC (8);
+};
+
struct STAT
{
- static const hb_tag_t tableTag = HB_OT_TAG_STAT;
+ enum { tableTag = HB_OT_TAG_STAT };
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag.cc
index a569b8c22a2..d04e5329a04 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag.cc
@@ -503,7 +503,7 @@ hb_ot_tags_to_script_and_language (hb_tag_t script_tag,
#ifdef MAIN
static inline void
-test_langs_sorted (void)
+test_langs_sorted ()
{
for (unsigned int i = 1; i < ARRAY_LENGTH (ot_languages); i++)
{
@@ -518,7 +518,7 @@ test_langs_sorted (void)
}
int
-main (void)
+main ()
{
test_langs_sorted ();
return 0;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-avar-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-avar-table.hh
index c2b110a2199..67a60f5e0c5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-avar-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-avar-table.hh
@@ -42,7 +42,7 @@ namespace OT {
struct AxisValueMap
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -59,7 +59,7 @@ struct AxisValueMap
struct SegmentMaps : ArrayOf<AxisValueMap>
{
- inline int map (int value) const
+ int map (int value) const
{
/* The following special-cases are not part of OpenType, which requires
* that at least -1, 0, and +1 must be mapped. But we include these as
@@ -99,9 +99,9 @@ struct SegmentMaps : ArrayOf<AxisValueMap>
struct avar
{
- static const hb_tag_t tableTag = HB_OT_TAG_avar;
+ enum { tableTag = HB_OT_TAG_avar };
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
if (unlikely (!(version.sanitize (c) &&
@@ -121,7 +121,7 @@ struct avar
return_trace (true);
}
- inline void map_coords (int *coords, unsigned int coords_length) const
+ void map_coords (int *coords, unsigned int coords_length) const
{
unsigned int count = MIN<unsigned int> (coords_length, axisCount);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-fvar-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-fvar-table.hh
index fed334e8a61..76c9eb2cc44 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-fvar-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-fvar-table.hh
@@ -44,10 +44,10 @@ struct InstanceRecord
{
friend struct fvar;
- inline hb_array_t<const Fixed> get_coordinates (unsigned int axis_count) const
+ hb_array_t<const Fixed> get_coordinates (unsigned int axis_count) const
{ return coordinatesZ.as_array (axis_count); }
- inline bool sanitize (hb_sanitize_context_t *c, unsigned int axis_count) const
+ bool sanitize (hb_sanitize_context_t *c, unsigned int axis_count) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -75,7 +75,7 @@ struct AxisRecord
AXIS_FLAG_HIDDEN = 0x0001,
};
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -96,11 +96,11 @@ struct AxisRecord
struct fvar
{
- static const hb_tag_t tableTag = HB_OT_TAG_fvar;
+ enum { tableTag = HB_OT_TAG_fvar };
- inline bool has_data (void) const { return version.to_int (); }
+ bool has_data () const { return version.to_int (); }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (version.sanitize (c) &&
@@ -112,10 +112,9 @@ struct fvar
c->check_range (get_instance (0), instanceCount, instanceSize));
}
- inline unsigned int get_axis_count (void) const
- { return axisCount; }
+ unsigned int get_axis_count () const { return axisCount; }
- inline void get_axis_deprecated (unsigned int axis_index,
+ void get_axis_deprecated (unsigned int axis_index,
hb_ot_var_axis_t *info) const
{
const AxisRecord &axis = get_axes ()[axis_index];
@@ -127,8 +126,8 @@ struct fvar
info->max_value = MAX<float> (info->default_value, axis.maxValue / 65536.);
}
- inline void get_axis_info (unsigned int axis_index,
- hb_ot_var_axis_info_t *info) const
+ void get_axis_info (unsigned int axis_index,
+ hb_ot_var_axis_info_t *info) const
{
const AxisRecord &axis = get_axes ()[axis_index];
info->axis_index = axis_index;
@@ -142,9 +141,9 @@ struct fvar
info->reserved = 0;
}
- inline unsigned int get_axes_deprecated (unsigned int start_offset,
- unsigned int *axes_count /* IN/OUT */,
- hb_ot_var_axis_t *axes_array /* OUT */) const
+ unsigned int get_axes_deprecated (unsigned int start_offset,
+ unsigned int *axes_count /* IN/OUT */,
+ hb_ot_var_axis_t *axes_array /* OUT */) const
{
if (axes_count)
{
@@ -164,9 +163,9 @@ struct fvar
return axisCount;
}
- inline unsigned int get_axis_infos (unsigned int start_offset,
- unsigned int *axes_count /* IN/OUT */,
- hb_ot_var_axis_info_t *axes_array /* OUT */) const
+ unsigned int get_axis_infos (unsigned int start_offset,
+ unsigned int *axes_count /* IN/OUT */,
+ hb_ot_var_axis_info_t *axes_array /* OUT */) const
{
if (axes_count)
{
@@ -186,9 +185,9 @@ struct fvar
return axisCount;
}
- inline bool find_axis_deprecated (hb_tag_t tag,
- unsigned int *axis_index,
- hb_ot_var_axis_t *info) const
+ bool find_axis_deprecated (hb_tag_t tag,
+ unsigned int *axis_index,
+ hb_ot_var_axis_t *info) const
{
const AxisRecord *axes = get_axes ();
unsigned int count = get_axis_count ();
@@ -205,8 +204,8 @@ struct fvar
return false;
}
- inline bool find_axis_info (hb_tag_t tag,
- hb_ot_var_axis_info_t *info) const
+ bool find_axis_info (hb_tag_t tag,
+ hb_ot_var_axis_info_t *info) const
{
const AxisRecord *axes = get_axes ();
unsigned int count = get_axis_count ();
@@ -219,7 +218,7 @@ struct fvar
return false;
}
- inline int normalize_axis_value (unsigned int axis_index, float v) const
+ int normalize_axis_value (unsigned int axis_index, float v) const
{
hb_ot_var_axis_info_t axis;
get_axis_info (axis_index, &axis);
@@ -235,17 +234,16 @@ struct fvar
return (int) (v * 16384.f + (v >= 0.f ? .5f : -.5f));
}
- inline unsigned int get_instance_count (void) const
- { return instanceCount; }
+ unsigned int get_instance_count () const { return instanceCount; }
- inline hb_ot_name_id_t get_instance_subfamily_name_id (unsigned int instance_index) const
+ hb_ot_name_id_t get_instance_subfamily_name_id (unsigned int instance_index) const
{
const InstanceRecord *instance = get_instance (instance_index);
if (unlikely (!instance)) return HB_OT_NAME_ID_INVALID;
return instance->subfamilyNameID;
}
- inline hb_ot_name_id_t get_instance_postscript_name_id (unsigned int instance_index) const
+ hb_ot_name_id_t get_instance_postscript_name_id (unsigned int instance_index) const
{
const InstanceRecord *instance = get_instance (instance_index);
if (unlikely (!instance)) return HB_OT_NAME_ID_INVALID;
@@ -254,7 +252,7 @@ struct fvar
return HB_OT_NAME_ID_INVALID;
}
- inline unsigned int get_instance_coords (unsigned int instance_index,
+ unsigned int get_instance_coords (unsigned int instance_index,
unsigned int *coords_length, /* IN/OUT */
float *coords /* OUT */) const
{
@@ -277,10 +275,10 @@ struct fvar
}
protected:
- inline hb_array_t<const AxisRecord> get_axes (void) const
+ hb_array_t<const AxisRecord> get_axes () const
{ return hb_array (&(this+firstAxis), axisCount); }
- inline const InstanceRecord *get_instance (unsigned int i) const
+ const InstanceRecord *get_instance (unsigned int i) const
{
if (unlikely (i >= instanceCount)) return nullptr;
return &StructAtOffset<InstanceRecord> (&StructAfter<InstanceRecord> (get_axes ()),
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-hvar-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-hvar-table.hh
index 62a6547b50c..2640f07ee19 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-hvar-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-hvar-table.hh
@@ -35,7 +35,7 @@ namespace OT {
struct DeltaSetIndexMap
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
@@ -73,11 +73,9 @@ struct DeltaSetIndexMap
}
protected:
- inline unsigned int get_width (void) const
- { return ((format >> 4) & 3) + 1; }
+ unsigned int get_width () const { return ((format >> 4) & 3) + 1; }
- inline unsigned int get_inner_bitcount (void) const
- { return (format & 0xF) + 1; }
+ unsigned int get_inner_bitcount () const { return (format & 0xF) + 1; }
protected:
HBUINT16 format; /* A packed field that describes the compressed
@@ -102,10 +100,10 @@ struct DeltaSetIndexMap
struct HVARVVAR
{
- static const hb_tag_t HVARTag = HB_OT_TAG_HVAR;
- static const hb_tag_t VVARTag = HB_OT_TAG_VVAR;
+ enum { HVARTag = HB_OT_TAG_HVAR };
+ enum { VVARTag = HB_OT_TAG_VVAR };
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (version.sanitize (c) &&
@@ -116,15 +114,14 @@ struct HVARVVAR
rsbMap.sanitize (c, this));
}
- inline float get_advance_var (hb_codepoint_t glyph,
- const int *coords, unsigned int coord_count) const
+ float get_advance_var (hb_codepoint_t glyph,
+ const int *coords, unsigned int coord_count) const
{
unsigned int varidx = (this+advMap).map (glyph);
return (this+varStore).get_delta (varidx, coords, coord_count);
}
- inline bool has_sidebearing_deltas (void) const
- { return lsbMap && rsbMap; }
+ bool has_sidebearing_deltas () const { return lsbMap && rsbMap; }
protected:
FixedVersion<>version; /* Version of the metrics variation table
@@ -143,12 +140,12 @@ struct HVARVVAR
};
struct HVAR : HVARVVAR {
- static const hb_tag_t tableTag = HB_OT_TAG_HVAR;
+ enum { tableTag = HB_OT_TAG_HVAR };
};
struct VVAR : HVARVVAR {
- static const hb_tag_t tableTag = HB_OT_TAG_VVAR;
+ enum { tableTag = HB_OT_TAG_VVAR };
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (static_cast<const HVARVVAR *> (this)->sanitize (c) &&
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-mvar-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-mvar-table.hh
index b16a09b3d14..a5eeddc5427 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-mvar-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-mvar-table.hh
@@ -35,7 +35,7 @@ namespace OT {
struct VariationValueRecord
{
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -58,9 +58,9 @@ struct VariationValueRecord
struct MVAR
{
- static const hb_tag_t tableTag = HB_OT_TAG_MVAR;
+ enum { tableTag = HB_OT_TAG_MVAR };
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (version.sanitize (c) &&
@@ -73,8 +73,8 @@ struct MVAR
valueRecordSize));
}
- inline float get_var (hb_tag_t tag,
- const int *coords, unsigned int coord_count) const
+ float get_var (hb_tag_t tag,
+ const int *coords, unsigned int coord_count) const
{
const VariationValueRecord *record;
record = (VariationValueRecord *) bsearch (&tag, valuesZ.arrayZ,
@@ -87,7 +87,7 @@ struct MVAR
}
protected:
- static inline int tag_compare (const void *pa, const void *pb)
+ static int tag_compare (const void *pa, const void *pb)
{
const hb_tag_t *a = (const hb_tag_t *) pa;
const Tag *b = (const Tag *) pb;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var.h
index b9d5e408df0..cf6f0c9503f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var.h
@@ -68,7 +68,7 @@ hb_ot_var_get_axis_count (hb_face_t *face);
typedef enum { /*< flags >*/
HB_OT_VAR_AXIS_FLAG_HIDDEN = 0x00000001u,
- _HB_OT_VAR_AXIS_FLAG_MAX_VALUE= 0x7FFFFFFFu, /*< skip >*/
+ _HB_OT_VAR_AXIS_FLAG_MAX_VALUE= 0x7FFFFFFFu /*< skip >*/
} hb_ot_var_axis_flags_t;
/**
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-vorg-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-vorg-table.hh
index a0480cbcb77..884d04312ff 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-vorg-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-vorg-table.hh
@@ -1,5 +1,5 @@
/*
- * Copyright © 2018 Adobe Systems Incorporated.
+ * Copyright © 2018 Adobe Inc.
*
* This is part of HarfBuzz, a text shaping library.
*
@@ -39,9 +39,9 @@ namespace OT {
struct VertOriginMetric
{
- inline int cmp (hb_codepoint_t g) const { return glyph.cmp (g); }
+ int cmp (hb_codepoint_t g) const { return glyph.cmp (g); }
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this));
@@ -57,11 +57,11 @@ struct VertOriginMetric
struct VORG
{
- static const hb_tag_t tableTag = HB_OT_TAG_VORG;
+ enum { tableTag = HB_OT_TAG_VORG };
- inline bool has_data (void) const { return version.to_int (); }
+ bool has_data () const { return version.to_int (); }
- inline int get_y_origin (hb_codepoint_t glyph) const
+ int get_y_origin (hb_codepoint_t glyph) const
{
unsigned int i;
if (!vertYOrigins.bfind (glyph, &i))
@@ -69,11 +69,11 @@ struct VORG
return vertYOrigins[i].vertOriginY;
}
- inline bool _subset (const hb_subset_plan_t *plan HB_UNUSED,
- const VORG *vorg_table,
- const hb_vector_t<VertOriginMetric> &subset_metrics,
- unsigned int dest_sz,
- void *dest) const
+ bool _subset (const hb_subset_plan_t *plan HB_UNUSED,
+ const VORG *vorg_table,
+ const hb_vector_t<VertOriginMetric> &subset_metrics,
+ unsigned int dest_sz,
+ void *dest) const
{
hb_serialize_context_t c (dest, dest_sz);
@@ -102,7 +102,7 @@ struct VORG
return success;
}
- inline bool subset (hb_subset_plan_t *plan) const
+ bool subset (hb_subset_plan_t *plan) const
{
hb_blob_t *vorg_blob = hb_sanitize_context_t().reference_table<VORG> (plan->source);
const VORG *vorg_table = vorg_blob->as<VORG> ();
@@ -159,7 +159,7 @@ struct VORG
return success;
}
- inline bool sanitize (hb_sanitize_context_t *c) const
+ bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) &&
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot.h
index c168175ac35..db784694c6a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot.h
@@ -31,6 +31,7 @@
#include "hb.h"
#include "hb-ot-color.h"
+#include "hb-ot-deprecated.h"
#include "hb-ot-font.h"
#include "hb-ot-layout.h"
#include "hb-ot-math.h"
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set-digest.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set-digest.hh
index 4e99df0eb55..9f49af17810 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set-digest.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set-digest.hh
@@ -50,26 +50,23 @@ struct hb_set_digest_lowest_bits_t
{
enum { mask_bytes = sizeof (mask_t) };
enum { mask_bits = sizeof (mask_t) * 8 };
- static const unsigned int num_bits = 0
- + (mask_bytes >= 1 ? 3 : 0)
- + (mask_bytes >= 2 ? 1 : 0)
- + (mask_bytes >= 4 ? 1 : 0)
- + (mask_bytes >= 8 ? 1 : 0)
- + (mask_bytes >= 16? 1 : 0)
- + 0;
+ enum { num_bits = 0
+ + (mask_bytes >= 1 ? 3 : 0)
+ + (mask_bytes >= 2 ? 1 : 0)
+ + (mask_bytes >= 4 ? 1 : 0)
+ + (mask_bytes >= 8 ? 1 : 0)
+ + (mask_bytes >= 16? 1 : 0)
+ + 0 };
static_assert ((shift < sizeof (hb_codepoint_t) * 8), "");
static_assert ((shift + num_bits <= sizeof (hb_codepoint_t) * 8), "");
- inline void init (void) {
- mask = 0;
- }
+ void init () { mask = 0; }
- inline void add (hb_codepoint_t g) {
- mask |= mask_for (g);
- }
+ void add (hb_codepoint_t g) { mask |= mask_for (g); }
- inline bool add_range (hb_codepoint_t a, hb_codepoint_t b) {
+ bool add_range (hb_codepoint_t a, hb_codepoint_t b)
+ {
if ((b >> shift) - (a >> shift) >= mask_bits - 1)
mask = (mask_t) -1;
else {
@@ -81,7 +78,7 @@ struct hb_set_digest_lowest_bits_t
}
template <typename T>
- inline void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
{
for (unsigned int i = 0; i < count; i++)
{
@@ -90,7 +87,7 @@ struct hb_set_digest_lowest_bits_t
}
}
template <typename T>
- inline bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
{
for (unsigned int i = 0; i < count; i++)
{
@@ -100,51 +97,53 @@ struct hb_set_digest_lowest_bits_t
return true;
}
- inline bool may_have (hb_codepoint_t g) const {
- return !!(mask & mask_for (g));
- }
+ bool may_have (hb_codepoint_t g) const
+ { return !!(mask & mask_for (g)); }
private:
- static inline mask_t mask_for (hb_codepoint_t g) {
- return ((mask_t) 1) << ((g >> shift) & (mask_bits - 1));
- }
+ static mask_t mask_for (hb_codepoint_t g)
+ { return ((mask_t) 1) << ((g >> shift) & (mask_bits - 1)); }
mask_t mask;
};
template <typename head_t, typename tail_t>
struct hb_set_digest_combiner_t
{
- inline void init (void) {
+ void init ()
+ {
head.init ();
tail.init ();
}
- inline void add (hb_codepoint_t g) {
+ void add (hb_codepoint_t g)
+ {
head.add (g);
tail.add (g);
}
- inline bool add_range (hb_codepoint_t a, hb_codepoint_t b) {
+ bool add_range (hb_codepoint_t a, hb_codepoint_t b)
+ {
head.add_range (a, b);
tail.add_range (a, b);
return true;
}
template <typename T>
- inline void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
{
head.add_array (array, count, stride);
tail.add_array (array, count, stride);
}
template <typename T>
- inline bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
{
head.add_sorted_array (array, count, stride);
tail.add_sorted_array (array, count, stride);
return true;
}
- inline bool may_have (hb_codepoint_t g) const {
+ bool may_have (hb_codepoint_t g) const
+ {
return head.may_have (g) && tail.may_have (g);
}
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 67ec5618028..06823626452 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.cc
@@ -47,7 +47,7 @@
* Since: 0.9.2
**/
hb_set_t *
-hb_set_create (void)
+hb_set_create ()
{
hb_set_t *set;
@@ -67,7 +67,7 @@ hb_set_create (void)
* Since: 0.9.2
**/
hb_set_t *
-hb_set_get_empty (void)
+hb_set_get_empty ()
{
return const_cast<hb_set_t *> (&Null(hb_set_t));
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.hh
index 8b7a0f3d0c6..19596880e61 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.hh
@@ -40,12 +40,12 @@
struct hb_set_t
{
HB_NO_COPY_ASSIGN (hb_set_t);
- inline hb_set_t (void) { init (); }
- inline ~hb_set_t (void) { fini (); }
+ hb_set_t () { init (); }
+ ~hb_set_t () { fini (); }
struct page_map_t
{
- inline int cmp (const page_map_t &o) const { return (int) o.major - (int) major; }
+ int cmp (const page_map_t &o) const { return (int) o.major - (int) major; }
uint32_t major;
uint32_t index;
@@ -53,13 +53,13 @@ struct hb_set_t
struct page_t
{
- inline void init0 (void) { v.clear (); }
- inline void init1 (void) { v.clear (0xFF); }
+ void init0 () { v.clear (); }
+ void init1 () { v.clear (0xFF); }
- inline unsigned int len (void) const
+ unsigned int len () const
{ return ARRAY_LENGTH_CONST (v); }
- inline bool is_empty (void) const
+ bool is_empty () const
{
for (unsigned int i = 0; i < len (); i++)
if (v[i])
@@ -67,11 +67,11 @@ struct hb_set_t
return true;
}
- inline void add (hb_codepoint_t g) { elt (g) |= mask (g); }
- inline void del (hb_codepoint_t g) { elt (g) &= ~mask (g); }
- inline bool has (hb_codepoint_t g) const { return !!(elt (g) & mask (g)); }
+ void add (hb_codepoint_t g) { elt (g) |= mask (g); }
+ void del (hb_codepoint_t g) { elt (g) &= ~mask (g); }
+ bool has (hb_codepoint_t g) const { return !!(elt (g) & mask (g)); }
- inline void add_range (hb_codepoint_t a, hb_codepoint_t b)
+ void add_range (hb_codepoint_t a, hb_codepoint_t b)
{
elt_t *la = &elt (a);
elt_t *lb = &elt (b);
@@ -88,12 +88,12 @@ struct hb_set_t
}
}
- inline bool is_equal (const page_t *other) const
+ bool is_equal (const page_t *other) const
{
return 0 == hb_memcmp (&v, &other->v, sizeof (v));
}
- inline unsigned int get_population (void) const
+ unsigned int get_population () const
{
unsigned int pop = 0;
for (unsigned int i = 0; i < len (); i++)
@@ -101,7 +101,7 @@ struct hb_set_t
return pop;
}
- inline bool next (hb_codepoint_t *codepoint) const
+ bool next (hb_codepoint_t *codepoint) const
{
unsigned int m = (*codepoint + 1) & MASK;
if (!m)
@@ -123,7 +123,7 @@ struct hb_set_t
*codepoint = INVALID;
return false;
}
- inline bool previous (hb_codepoint_t *codepoint) const
+ bool previous (hb_codepoint_t *codepoint) const
{
unsigned int m = (*codepoint - 1) & MASK;
if (m == MASK)
@@ -145,14 +145,14 @@ struct hb_set_t
*codepoint = INVALID;
return false;
}
- inline hb_codepoint_t get_min (void) const
+ hb_codepoint_t get_min () const
{
for (unsigned int i = 0; i < len (); i++)
if (v[i])
return i * ELT_BITS + elt_get_min (v[i]);
return INVALID;
}
- inline hb_codepoint_t get_max (void) const
+ hb_codepoint_t get_max () const
{
for (int i = len () - 1; i >= 0; i--)
if (v[i])
@@ -164,8 +164,8 @@ struct hb_set_t
enum { PAGE_BITS = 512 };
static_assert ((PAGE_BITS & ((PAGE_BITS) - 1)) == 0, "");
- 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; }
+ static unsigned int elt_get_min (const elt_t &elt) { return hb_ctz (elt); }
+ static unsigned int elt_get_max (const elt_t &elt) { return hb_bit_storage (elt) - 1; }
typedef hb_vector_size_t<elt_t, PAGE_BITS / 8> vector_t;
@@ -189,31 +189,33 @@ struct hb_set_t
hb_vector_t<page_map_t, 1> page_map;
hb_vector_t<page_t, 1> pages;
- inline void init_shallow (void)
+ void init_shallow ()
{
successful = true;
population = 0;
page_map.init ();
pages.init ();
}
- inline void init (void)
+ void init ()
{
hb_object_init (this);
init_shallow ();
}
- inline void fini_shallow (void)
+ void fini_shallow ()
{
population = 0;
page_map.fini ();
pages.fini ();
}
- inline void fini (void)
+ void fini ()
{
hb_object_fini (this);
fini_shallow ();
}
- inline bool resize (unsigned int count)
+ bool in_error () const { return !successful; }
+
+ bool resize (unsigned int count)
{
if (unlikely (!successful)) return false;
if (!pages.resize (count) || !page_map.resize (count))
@@ -225,7 +227,7 @@ struct hb_set_t
return true;
}
- inline void clear (void)
+ void clear ()
{
if (unlikely (hb_object_is_immutable (this)))
return;
@@ -234,7 +236,7 @@ struct hb_set_t
page_map.resize (0);
pages.resize (0);
}
- inline bool is_empty (void) const
+ bool is_empty () const
{
unsigned int count = pages.len;
for (unsigned int i = 0; i < count; i++)
@@ -243,9 +245,9 @@ struct hb_set_t
return true;
}
- inline void dirty (void) { population = (unsigned int) -1; }
+ void dirty () { population = (unsigned int) -1; }
- inline void add (hb_codepoint_t g)
+ void add (hb_codepoint_t g)
{
if (unlikely (!successful)) return;
if (unlikely (g == INVALID)) return;
@@ -253,7 +255,7 @@ struct hb_set_t
page_t *page = page_for_insert (g); if (unlikely (!page)) return;
page->add (g);
}
- inline bool add_range (hb_codepoint_t a, hb_codepoint_t b)
+ bool add_range (hb_codepoint_t a, hb_codepoint_t b)
{
if (unlikely (!successful)) return true; /* https://github.com/harfbuzz/harfbuzz/issues/657 */
if (unlikely (a > b || a == INVALID || b == INVALID)) return false;
@@ -283,7 +285,7 @@ struct hb_set_t
}
template <typename T>
- inline void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
{
if (unlikely (!successful)) return;
if (!count) return;
@@ -309,7 +311,7 @@ struct hb_set_t
/* Might return false if array looks unsorted.
* Used for faster rejection of corrupt data. */
template <typename T>
- inline bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
{
if (unlikely (!successful)) return true; /* https://github.com/harfbuzz/harfbuzz/issues/657 */
if (!count) return true;
@@ -337,7 +339,7 @@ struct hb_set_t
return true;
}
- inline void del (hb_codepoint_t g)
+ void del (hb_codepoint_t g)
{
/* TODO perform op even if !successful. */
if (unlikely (!successful)) return;
@@ -347,7 +349,7 @@ struct hb_set_t
dirty ();
page->del (g);
}
- inline void del_range (hb_codepoint_t a, hb_codepoint_t b)
+ void del_range (hb_codepoint_t a, hb_codepoint_t b)
{
/* TODO perform op even if !successful. */
/* TODO Optimize, like add_range(). */
@@ -355,31 +357,31 @@ struct hb_set_t
for (unsigned int i = a; i < b + 1; i++)
del (i);
}
- inline bool has (hb_codepoint_t g) const
+ bool has (hb_codepoint_t g) const
{
const page_t *page = page_for (g);
if (!page)
return false;
return page->has (g);
}
- inline bool intersects (hb_codepoint_t first,
+ bool intersects (hb_codepoint_t first,
hb_codepoint_t last) const
{
hb_codepoint_t c = first - 1;
return next (&c) && c <= last;
}
- inline void set (const hb_set_t *other)
+ void set (const hb_set_t *other)
{
if (unlikely (!successful)) return;
unsigned int count = other->pages.len;
if (!resize (count))
return;
population = other->population;
- memcpy (pages, other->pages, count * pages.item_size);
- memcpy (page_map, other->page_map, count * page_map.item_size);
+ memcpy ((void *) pages, (const void *) other->pages, count * pages.item_size);
+ memcpy ((void *) page_map, (const void *) other->page_map, count * page_map.item_size);
}
- inline bool is_equal (const hb_set_t *other) const
+ bool is_equal (const hb_set_t *other) const
{
if (get_population () != other->get_population ())
return false;
@@ -406,7 +408,7 @@ struct hb_set_t
return true;
}
- inline bool is_subset (const hb_set_t *larger_set) const
+ bool is_subset (const hb_set_t *larger_set) const
{
if (get_population () > larger_set->get_population ())
return false;
@@ -421,7 +423,7 @@ struct hb_set_t
}
template <class Op>
- inline void process (const hb_set_t *other)
+ void process (const hb_set_t *other)
{
if (unlikely (!successful)) return;
@@ -519,23 +521,23 @@ struct hb_set_t
resize (newCount);
}
- inline void union_ (const hb_set_t *other)
+ void union_ (const hb_set_t *other)
{
process<HbOpOr> (other);
}
- inline void intersect (const hb_set_t *other)
+ void intersect (const hb_set_t *other)
{
process<HbOpAnd> (other);
}
- inline void subtract (const hb_set_t *other)
+ void subtract (const hb_set_t *other)
{
process<HbOpMinus> (other);
}
- inline void symmetric_difference (const hb_set_t *other)
+ void symmetric_difference (const hb_set_t *other)
{
process<HbOpXor> (other);
}
- inline bool next (hb_codepoint_t *codepoint) const
+ bool next (hb_codepoint_t *codepoint) const
{
if (unlikely (*codepoint == INVALID)) {
*codepoint = get_min ();
@@ -566,7 +568,7 @@ struct hb_set_t
*codepoint = INVALID;
return false;
}
- inline bool previous (hb_codepoint_t *codepoint) const
+ bool previous (hb_codepoint_t *codepoint) const
{
if (unlikely (*codepoint == INVALID)) {
*codepoint = get_max ();
@@ -597,7 +599,7 @@ struct hb_set_t
*codepoint = INVALID;
return false;
}
- inline bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const
+ bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const
{
hb_codepoint_t i;
@@ -615,7 +617,7 @@ struct hb_set_t
return true;
}
- inline bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const
+ bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const
{
hb_codepoint_t i;
@@ -634,7 +636,7 @@ struct hb_set_t
return true;
}
- inline unsigned int get_population (void) const
+ unsigned int get_population () const
{
if (population != (unsigned int) -1)
return population;
@@ -647,7 +649,7 @@ struct hb_set_t
population = pop;
return pop;
}
- inline hb_codepoint_t get_min (void) const
+ hb_codepoint_t get_min () const
{
unsigned int count = pages.len;
for (unsigned int i = 0; i < count; i++)
@@ -655,18 +657,18 @@ struct hb_set_t
return page_map[i].major * page_t::PAGE_BITS + page_at (i).get_min ();
return INVALID;
}
- inline hb_codepoint_t get_max (void) const
+ hb_codepoint_t get_max () const
{
unsigned int count = pages.len;
for (int i = count - 1; i >= 0; i++)
if (!page_at (i).is_empty ())
- return page_map[i].major * page_t::PAGE_BITS + page_at (i).get_max ();
+ return page_map[(unsigned) i].major * page_t::PAGE_BITS + page_at (i).get_max ();
return INVALID;
}
static const hb_codepoint_t INVALID = HB_SET_VALUE_INVALID;
- inline page_t *page_for_insert (hb_codepoint_t g)
+ page_t *page_for_insert (hb_codepoint_t g)
{
page_map_t map = {get_major (g), pages.len};
unsigned int i;
@@ -678,12 +680,12 @@ struct hb_set_t
pages[map.index].init0 ();
memmove (page_map + i + 1,
page_map + i,
- (page_map.len - 1 - i) * sizeof (page_map[0]));
+ (page_map.len - 1 - i) * page_map.item_size);
page_map[i] = map;
}
return &pages[page_map[i].index];
}
- inline page_t *page_for (hb_codepoint_t g)
+ page_t *page_for (hb_codepoint_t g)
{
page_map_t key = {get_major (g)};
const page_map_t *found = page_map.bsearch (key);
@@ -691,7 +693,7 @@ struct hb_set_t
return &pages[found->index];
return nullptr;
}
- inline const page_t *page_for (hb_codepoint_t g) const
+ 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);
@@ -699,10 +701,10 @@ struct hb_set_t
return &pages[found->index];
return nullptr;
}
- inline page_t &page_at (unsigned int i) { return pages[page_map[i].index]; }
- inline const page_t &page_at (unsigned int i) const { return pages[page_map[i].index]; }
- inline unsigned int get_major (hb_codepoint_t g) const { return g / page_t::PAGE_BITS; }
- inline hb_codepoint_t major_start (unsigned int major) const { return major * page_t::PAGE_BITS; }
+ page_t &page_at (unsigned int i) { return pages[page_map[i].index]; }
+ const page_t &page_at (unsigned int i) const { return pages[page_map[i].index]; }
+ unsigned int get_major (hb_codepoint_t g) const { return g / page_t::PAGE_BITS; }
+ hb_codepoint_t major_start (unsigned int major) const { return major * page_t::PAGE_BITS; }
};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.cc
index bc3d81636b9..61ea8d0e522 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.cc
@@ -247,7 +247,7 @@ bail:
* Since: 0.9.7
**/
hb_shape_plan_t *
-hb_shape_plan_get_empty (void)
+hb_shape_plan_get_empty ()
{
return const_cast<hb_shape_plan_t *> (&Null(hb_shape_plan_t));
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.hh
index d9aa3ee1ab4..3a057fd22d1 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.hh
@@ -53,10 +53,7 @@ struct hb_shape_plan_key_t
unsigned int num_coords,
const char * const *shaper_list);
- HB_INTERNAL inline void free (void)
- {
- ::free ((void *) user_features);
- }
+ HB_INTERNAL inline void free () { ::free ((void *) user_features); }
HB_INTERNAL bool user_features_match (const hb_shape_plan_key_t *other);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape.cc
index 45f3a6916e2..deff77bedcd 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape.cc
@@ -49,7 +49,7 @@
#if HB_USE_ATEXIT
-static void free_static_shaper_list (void);
+static void free_static_shaper_list ();
#endif
static const char *nil_shaper_list[] = {nullptr};
@@ -57,7 +57,7 @@ static const char *nil_shaper_list[] = {nullptr};
static struct hb_shaper_list_lazy_loader_t : hb_lazy_loader_t<const char *,
hb_shaper_list_lazy_loader_t>
{
- static inline const char ** create (void)
+ static const char ** create ()
{
const char **shaper_list = (const char **) calloc (1 + HB_SHAPERS_COUNT, sizeof (const char *));
if (unlikely (!shaper_list))
@@ -75,19 +75,15 @@ static struct hb_shaper_list_lazy_loader_t : hb_lazy_loader_t<const char *,
return shaper_list;
}
- static inline void destroy (const char **l)
- {
- free (l);
- }
- static inline const char ** get_null (void)
- {
- return nil_shaper_list;
- }
+ static void destroy (const char **l)
+ { free (l); }
+ static const char ** get_null ()
+ { return nil_shaper_list; }
} static_shaper_list;
#if HB_USE_ATEXIT
static
-void free_static_shaper_list (void)
+void free_static_shaper_list ()
{
static_shaper_list.free_instance ();
}
@@ -105,7 +101,7 @@ void free_static_shaper_list (void)
* Since: 0.9.2
**/
const char **
-hb_shape_list_shapers (void)
+hb_shape_list_shapers ()
{
return static_shaper_list.get_unconst ();
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper-list.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper-list.hh
index 1fdb64810b3..36d8fc7f660 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper-list.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper-list.hh
@@ -34,10 +34,6 @@
/* Only picks up fonts that have a "Silf" table. */
HB_SHAPER_IMPLEMENT (graphite2)
#endif
-#ifdef HAVE_CORETEXT
-/* Only picks up fonts that have a "mort" or "morx" table. */
-HB_SHAPER_IMPLEMENT (coretext_aat)
-#endif
HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main OpenType shaper. */
@@ -49,6 +45,10 @@ HB_SHAPER_IMPLEMENT (directwrite)
#endif
#ifdef HAVE_CORETEXT
HB_SHAPER_IMPLEMENT (coretext)
+
+/* Only picks up fonts that have a "mort" or "morx" table.
+ Probably going to be removed https://github.com/harfbuzz/harfbuzz/issues/1478 */
+HB_SHAPER_IMPLEMENT (coretext_aat)
#endif
#ifdef HAVE_FALLBACK
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper.cc
index b10927ecfcf..575ab1f7dd7 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper.cc
@@ -36,13 +36,13 @@ static const hb_shaper_entry_t all_shapers[] = {
};
#if HB_USE_ATEXIT
-static void free_static_shapers (void);
+static void free_static_shapers ();
#endif
static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_entry_t,
hb_shapers_lazy_loader_t>
{
- static inline hb_shaper_entry_t *create (void)
+ static hb_shaper_entry_t *create ()
{
char *env = getenv ("HB_SHAPER_LIST");
if (!env || !*env)
@@ -86,26 +86,20 @@ static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_entry_
return shapers;
}
- static inline void destroy (const hb_shaper_entry_t *p)
- {
- free ((void *) p);
- }
- static inline const hb_shaper_entry_t *get_null (void)
- {
- return all_shapers;
- }
+ static void destroy (const hb_shaper_entry_t *p) { free ((void *) p); }
+ static const hb_shaper_entry_t *get_null () { return all_shapers; }
} static_shapers;
#if HB_USE_ATEXIT
static
-void free_static_shapers (void)
+void free_static_shapers ()
{
static_shapers.free_instance ();
}
#endif
const hb_shaper_entry_t *
-_hb_shapers_get (void)
+_hb_shapers_get ()
{
return static_shapers.get_unconst ();
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper.hh
index 3fda27bc0ec..79dc5d07e09 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper.hh
@@ -47,7 +47,7 @@ struct hb_shaper_entry_t {
};
HB_INTERNAL const hb_shaper_entry_t *
-_hb_shapers_get (void);
+_hb_shapers_get ();
template <typename Data, unsigned int WheresData, typename T>
@@ -96,10 +96,10 @@ template <enum hb_shaper_order_t order, typename Object> struct hb_shaper_object
hb_##object##_t, WheresData> \
{ \
typedef HB_SHAPER_DATA_TYPE(shaper, object) Type; \
- static inline Type* create (hb_##object##_t *data) \
+ static Type* create (hb_##object##_t *data) \
{ return HB_SHAPER_DATA_CREATE_FUNC (shaper, object) (data); } \
- static inline Type *get_null (void) { return nullptr; } \
- static inline void destroy (Type *p) { HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (p); } \
+ static Type *get_null () { return nullptr; } \
+ static void destroy (Type *p) { HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (p); } \
}; \
\
static_assert (true, "") /* Require semicolon. */
@@ -108,14 +108,14 @@ template <enum hb_shaper_order_t order, typename Object> struct hb_shaper_object
template <typename Object>
struct hb_shaper_object_dataset_t
{
- inline void init0 (Object *parent_data)
+ void init0 (Object *parent_data)
{
this->parent_data = parent_data;
#define HB_SHAPER_IMPLEMENT(shaper) shaper.init0 ();
#include "hb-shaper-list.hh"
#undef HB_SHAPER_IMPLEMENT
}
- inline void fini (void)
+ void fini ()
{
#define HB_SHAPER_IMPLEMENT(shaper) shaper.fini ();
#include "hb-shaper-list.hh"
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-static.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-static.cc
index a22f729ef6e..4c515886024 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-static.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-static.cc
@@ -51,7 +51,7 @@ const unsigned char _hb_Null_AAT_Lookup[2] = {0xFF, 0xFF};
unsigned int
-hb_face_t::load_num_glyphs (void) const
+hb_face_t::load_num_glyphs () const
{
hb_sanitize_context_t c = hb_sanitize_context_t ();
c.set_num_glyphs (0); /* So we don't recurse ad infinitum. */
@@ -65,7 +65,7 @@ hb_face_t::load_num_glyphs (void) const
}
unsigned int
-hb_face_t::load_upem (void) const
+hb_face_t::load_upem () const
{
unsigned int ret = table.head->get_upem ();
upem.set_relaxed (ret);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.cc
new file mode 100644
index 00000000000..b6127a9aba1
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.cc
@@ -0,0 +1,226 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+
+#include "hb-ot-cff-common.hh"
+#include "hb-ot-cff2-table.hh"
+#include "hb-subset-cff-common.hh"
+
+/* Disable FDSelect format 0 for compatibility with fonttools which doesn't seem choose it.
+ * Rarely any/much smaller than format 3 anyway. */
+#define CFF_SERIALIZE_FDSELECT_0 0
+
+using namespace CFF;
+
+/**
+ * hb_plan_subset_cff_fdselect
+ * Determine an optimal FDSelect format according to a provided plan.
+ *
+ * Return value: FDSelect format, size, and ranges for the most compact subset FDSelect
+ * along with a font index remapping table
+ **/
+
+bool
+hb_plan_subset_cff_fdselect (const hb_vector_t<hb_codepoint_t> &glyphs,
+ unsigned int fdCount,
+ const FDSelect &src, /* IN */
+ unsigned int &subset_fd_count /* OUT */,
+ unsigned int &subset_fdselect_size /* OUT */,
+ unsigned int &subset_fdselect_format /* OUT */,
+ hb_vector_t<code_pair> &fdselect_ranges /* OUT */,
+ Remap &fdmap /* OUT */)
+{
+ subset_fd_count = 0;
+ subset_fdselect_size = 0;
+ subset_fdselect_format = 0;
+ unsigned int num_ranges = 0;
+
+ unsigned int subset_num_glyphs = glyphs.len;
+ if (subset_num_glyphs == 0)
+ return true;
+
+ {
+ /* use hb_set to determine the subset of font dicts */
+ hb_set_t *set = hb_set_create ();
+ if (set == &Null (hb_set_t))
+ return false;
+ hb_codepoint_t prev_fd = CFF_UNDEF_CODE;
+ for (hb_codepoint_t i = 0; i < subset_num_glyphs; i++)
+ {
+ hb_codepoint_t fd = src.get_fd (glyphs[i]);
+ set->add (fd);
+
+ if (fd != prev_fd)
+ {
+ num_ranges++;
+ prev_fd = fd;
+ code_pair pair = { fd, i };
+ fdselect_ranges.push (pair);
+ }
+ }
+
+ subset_fd_count = set->get_population ();
+ if (subset_fd_count == fdCount)
+ {
+ /* all font dicts belong to the subset. no need to subset FDSelect & FDArray */
+ fdmap.identity (fdCount);
+ hb_set_destroy (set);
+ }
+ else
+ {
+ /* create a fdmap */
+ if (!fdmap.reset (fdCount))
+ {
+ hb_set_destroy (set);
+ return false;
+ }
+
+ hb_codepoint_t fd = CFF_UNDEF_CODE;
+ while (set->next (&fd))
+ fdmap.add (fd);
+ hb_set_destroy (set);
+ if (unlikely (fdmap.get_count () != subset_fd_count))
+ return false;
+ }
+
+ /* update each font dict index stored as "code" in fdselect_ranges */
+ for (unsigned int i = 0; i < fdselect_ranges.len; i++)
+ fdselect_ranges[i].code = fdmap[fdselect_ranges[i].code];
+ }
+
+ /* determine which FDSelect format is most compact */
+ if (subset_fd_count > 0xFF)
+ {
+ if (unlikely (src.format != 4))
+ return false;
+ subset_fdselect_format = 4;
+ subset_fdselect_size = FDSelect::min_size + FDSelect4::min_size + FDSelect4_Range::static_size * num_ranges + HBUINT32::static_size;
+ }
+ else
+ {
+#if CFF_SERIALIZE_FDSELECT_0
+ unsigned int format0_size = FDSelect::min_size + FDSelect0::min_size + HBUINT8::static_size * subset_num_glyphs;
+#endif
+ unsigned int format3_size = FDSelect::min_size + FDSelect3::min_size + FDSelect3_Range::static_size * num_ranges + HBUINT16::static_size;
+
+#if CFF_SERIALIZE_FDSELECT_0
+ if (format0_size <= format3_size)
+ {
+ // subset_fdselect_format = 0;
+ subset_fdselect_size = format0_size;
+ }
+ else
+#endif
+ {
+ subset_fdselect_format = 3;
+ subset_fdselect_size = format3_size;
+ }
+ }
+
+ return true;
+}
+
+template <typename FDSELECT3_4>
+static inline bool
+serialize_fdselect_3_4 (hb_serialize_context_t *c,
+ const unsigned int num_glyphs,
+ const FDSelect &src,
+ unsigned int size,
+ const hb_vector_t<code_pair> &fdselect_ranges)
+{
+ TRACE_SERIALIZE (this);
+ FDSELECT3_4 *p = c->allocate_size<FDSELECT3_4> (size);
+ if (unlikely (p == nullptr)) return_trace (false);
+ p->nRanges.set (fdselect_ranges.len);
+ for (unsigned int i = 0; i < fdselect_ranges.len; i++)
+ {
+ p->ranges[i].first.set (fdselect_ranges[i].glyph);
+ p->ranges[i].fd.set (fdselect_ranges[i].code);
+ }
+ p->sentinel().set (num_glyphs);
+ return_trace (true);
+}
+
+/**
+ * hb_serialize_cff_fdselect
+ * Serialize a subset FDSelect format planned above.
+ **/
+bool
+hb_serialize_cff_fdselect (hb_serialize_context_t *c,
+ const unsigned int num_glyphs,
+ const FDSelect &src,
+ unsigned int fd_count,
+ unsigned int fdselect_format,
+ unsigned int size,
+ const hb_vector_t<code_pair> &fdselect_ranges)
+{
+ TRACE_SERIALIZE (this);
+ FDSelect *p = c->allocate_min<FDSelect> ();
+ if (unlikely (p == nullptr)) return_trace (false);
+ p->format.set (fdselect_format);
+ size -= FDSelect::min_size;
+
+ switch (fdselect_format)
+ {
+#if CFF_SERIALIZE_FDSELECT_0
+ case 0:
+ {
+ FDSelect0 *p = c->allocate_size<FDSelect0> (size);
+ if (unlikely (p == nullptr)) return_trace (false);
+ unsigned int range_index = 0;
+ unsigned int fd = fdselect_ranges[range_index++].code;
+ for (unsigned int i = 0; i < num_glyphs; i++)
+ {
+ if ((range_index < fdselect_ranges.len) &&
+ (i >= fdselect_ranges[range_index].glyph))
+ {
+ fd = fdselect_ranges[range_index++].code;
+ }
+ p->fds[i].set (fd);
+ }
+ break;
+ }
+#endif /* CFF_SERIALIZE_FDSELECT_0 */
+
+ case 3:
+ return serialize_fdselect_3_4<FDSelect3> (c,
+ num_glyphs,
+ src,
+ size,
+ fdselect_ranges);
+
+ case 4:
+ return serialize_fdselect_3_4<FDSelect4> (c,
+ num_glyphs,
+ src,
+ size,
+ fdselect_ranges);
+
+ default:
+ assert(false);
+ }
+
+ return_trace (true);
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.hh
new file mode 100644
index 00000000000..820a0908509
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.hh
@@ -0,0 +1,992 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+
+#ifndef HB_SUBSET_CFF_COMMON_HH
+#define HB_SUBSET_CFF_COMMON_HH
+
+#include "hb.hh"
+
+#include "hb-subset-plan.hh"
+#include "hb-cff-interp-cs-common.hh"
+
+namespace CFF {
+
+/* Used for writing a temporary charstring */
+struct StrEncoder
+{
+ StrEncoder (StrBuff &buff_)
+ : buff (buff_), error (false) {}
+
+ void reset () { buff.resize (0); }
+
+ void encode_byte (unsigned char b)
+ {
+ if (unlikely (buff.push ((const char)b) == &Crap(char)))
+ set_error ();
+ }
+
+ void encode_int (int v)
+ {
+ if ((-1131 <= v) && (v <= 1131))
+ {
+ if ((-107 <= v) && (v <= 107))
+ encode_byte (v + 139);
+ else if (v > 0)
+ {
+ v -= 108;
+ encode_byte ((v >> 8) + OpCode_TwoBytePosInt0);
+ encode_byte (v & 0xFF);
+ }
+ else
+ {
+ v = -v - 108;
+ encode_byte ((v >> 8) + OpCode_TwoByteNegInt0);
+ encode_byte (v & 0xFF);
+ }
+ }
+ else
+ {
+ if (unlikely (v < -32768))
+ v = -32768;
+ else if (unlikely (v > 32767))
+ v = 32767;
+ encode_byte (OpCode_shortint);
+ encode_byte ((v >> 8) & 0xFF);
+ encode_byte (v & 0xFF);
+ }
+ }
+
+ void encode_num (const Number& n)
+ {
+ if (n.in_int_range ())
+ {
+ encode_int (n.to_int ());
+ }
+ else
+ {
+ int32_t v = n.to_fixed ();
+ encode_byte (OpCode_fixedcs);
+ encode_byte ((v >> 24) & 0xFF);
+ encode_byte ((v >> 16) & 0xFF);
+ encode_byte ((v >> 8) & 0xFF);
+ encode_byte (v & 0xFF);
+ }
+ }
+
+ void encode_op (OpCode op)
+ {
+ if (Is_OpCode_ESC (op))
+ {
+ encode_byte (OpCode_escape);
+ encode_byte (Unmake_OpCode_ESC (op));
+ }
+ else
+ encode_byte (op);
+ }
+
+ void copy_str (const ByteStr &str)
+ {
+ unsigned int offset = buff.len;
+ buff.resize (offset + str.len);
+ if (unlikely (buff.len < offset + str.len))
+ {
+ set_error ();
+ return;
+ }
+ memcpy (&buff[offset], &str.str[0], str.len);
+ }
+
+ bool is_error () const { return error; }
+
+ protected:
+ void set_error () { error = true; }
+
+ StrBuff &buff;
+ bool error;
+};
+
+struct CFFSubTableOffsets {
+ CFFSubTableOffsets () : privateDictsOffset (0)
+ {
+ topDictInfo.init ();
+ FDSelectInfo.init ();
+ FDArrayInfo.init ();
+ charStringsInfo.init ();
+ globalSubrsInfo.init ();
+ localSubrsInfos.init ();
+ }
+
+ ~CFFSubTableOffsets () { localSubrsInfos.fini (); }
+
+ TableInfo topDictInfo;
+ TableInfo FDSelectInfo;
+ TableInfo FDArrayInfo;
+ TableInfo charStringsInfo;
+ unsigned int privateDictsOffset;
+ TableInfo globalSubrsInfo;
+ hb_vector_t<TableInfo> localSubrsInfos;
+};
+
+template <typename OPSTR=OpStr>
+struct CFFTopDict_OpSerializer : OpSerializer
+{
+ bool serialize (hb_serialize_context_t *c,
+ const OPSTR &opstr,
+ const CFFSubTableOffsets &offsets) const
+ {
+ TRACE_SERIALIZE (this);
+
+ switch (opstr.op)
+ {
+ case OpCode_CharStrings:
+ return_trace (FontDict::serialize_offset4_op(c, opstr.op, offsets.charStringsInfo.offset));
+
+ case OpCode_FDArray:
+ return_trace (FontDict::serialize_offset4_op(c, opstr.op, offsets.FDArrayInfo.offset));
+
+ case OpCode_FDSelect:
+ return_trace (FontDict::serialize_offset4_op(c, opstr.op, offsets.FDSelectInfo.offset));
+
+ default:
+ return_trace (copy_opstr (c, opstr));
+ }
+ return_trace (true);
+ }
+
+ unsigned int calculate_serialized_size (const OPSTR &opstr) const
+ {
+ switch (opstr.op)
+ {
+ case OpCode_CharStrings:
+ case OpCode_FDArray:
+ case OpCode_FDSelect:
+ return OpCode_Size (OpCode_longintdict) + 4 + OpCode_Size (opstr.op);
+
+ default:
+ return opstr.str.len;
+ }
+ }
+};
+
+struct CFFFontDict_OpSerializer : OpSerializer
+{
+ bool serialize (hb_serialize_context_t *c,
+ const OpStr &opstr,
+ const TableInfo &privateDictInfo) const
+ {
+ TRACE_SERIALIZE (this);
+
+ if (opstr.op == OpCode_Private)
+ {
+ /* serialize the private dict size & offset as 2-byte & 4-byte integers */
+ if (unlikely (!UnsizedByteStr::serialize_int2 (c, privateDictInfo.size) ||
+ !UnsizedByteStr::serialize_int4 (c, privateDictInfo.offset)))
+ return_trace (false);
+
+ /* serialize the opcode */
+ HBUINT8 *p = c->allocate_size<HBUINT8> (1);
+ if (unlikely (p == nullptr)) return_trace (false);
+ p->set (OpCode_Private);
+
+ return_trace (true);
+ }
+ else
+ {
+ HBUINT8 *d = c->allocate_size<HBUINT8> (opstr.str.len);
+ if (unlikely (d == nullptr)) return_trace (false);
+ memcpy (d, &opstr.str.str[0], opstr.str.len);
+ }
+ return_trace (true);
+ }
+
+ unsigned int calculate_serialized_size (const OpStr &opstr) const
+ {
+ if (opstr.op == OpCode_Private)
+ return OpCode_Size (OpCode_longintdict) + 4 + OpCode_Size (OpCode_shortint) + 2 + OpCode_Size (OpCode_Private);
+ else
+ return opstr.str.len;
+ }
+};
+
+struct CFFPrivateDict_OpSerializer : OpSerializer
+{
+ CFFPrivateDict_OpSerializer (bool desubroutinize_, bool drop_hints_)
+ : desubroutinize (desubroutinize_), drop_hints (drop_hints_) {}
+
+ bool serialize (hb_serialize_context_t *c,
+ const OpStr &opstr,
+ const unsigned int subrsOffset) const
+ {
+ TRACE_SERIALIZE (this);
+
+ if (drop_hints && DictOpSet::is_hint_op (opstr.op))
+ return true;
+ if (opstr.op == OpCode_Subrs)
+ {
+ if (desubroutinize || (subrsOffset == 0))
+ return_trace (true);
+ else
+ return_trace (FontDict::serialize_offset2_op (c, opstr.op, subrsOffset));
+ }
+ else
+ return_trace (copy_opstr (c, opstr));
+ }
+
+ unsigned int calculate_serialized_size (const OpStr &opstr,
+ bool has_localsubr=true) const
+ {
+ if (drop_hints && DictOpSet::is_hint_op (opstr.op))
+ return 0;
+ if (opstr.op == OpCode_Subrs)
+ {
+ if (desubroutinize || !has_localsubr)
+ return 0;
+ else
+ return OpCode_Size (OpCode_shortint) + 2 + OpCode_Size (opstr.op);
+ }
+ else
+ return opstr.str.len;
+ }
+
+ protected:
+ const bool desubroutinize;
+ const bool drop_hints;
+};
+
+struct FlattenParam
+{
+ StrBuff &flatStr;
+ bool drop_hints;
+};
+
+template <typename ACC, typename ENV, typename OPSET>
+struct SubrFlattener
+{
+ SubrFlattener (const ACC &acc_,
+ const hb_vector_t<hb_codepoint_t> &glyphs_,
+ bool drop_hints_)
+ : acc (acc_),
+ glyphs (glyphs_),
+ drop_hints (drop_hints_)
+ {}
+
+ bool flatten (StrBuffArray &flat_charstrings)
+ {
+ if (!flat_charstrings.resize (glyphs.len))
+ return false;
+ for (unsigned int i = 0; i < glyphs.len; i++)
+ flat_charstrings[i].init ();
+ for (unsigned int i = 0; i < glyphs.len; i++)
+ {
+ hb_codepoint_t glyph = glyphs[i];
+ const ByteStr str = (*acc.charStrings)[glyph];
+ unsigned int fd = acc.fdSelect->get_fd (glyph);
+ if (unlikely (fd >= acc.fdCount))
+ return false;
+ CSInterpreter<ENV, OPSET, FlattenParam> interp;
+ interp.env.init (str, acc, fd);
+ FlattenParam param = { flat_charstrings[i], drop_hints };
+ if (unlikely (!interp.interpret (param)))
+ return false;
+ }
+ return true;
+ }
+
+ const ACC &acc;
+ const hb_vector_t<hb_codepoint_t> &glyphs;
+ bool drop_hints;
+};
+
+struct SubrClosures
+{
+ SubrClosures () : valid (false), global_closure (nullptr)
+ { local_closures.init (); }
+
+ void init (unsigned int fd_count)
+ {
+ valid = true;
+ global_closure = hb_set_create ();
+ if (global_closure == hb_set_get_empty ())
+ valid = false;
+ if (!local_closures.resize (fd_count))
+ valid = false;
+
+ for (unsigned int i = 0; i < local_closures.len; i++)
+ {
+ local_closures[i] = hb_set_create ();
+ if (local_closures[i] == hb_set_get_empty ())
+ valid = false;
+ }
+ }
+
+ void fini ()
+ {
+ hb_set_destroy (global_closure);
+ for (unsigned int i = 0; i < local_closures.len; i++)
+ hb_set_destroy (local_closures[i]);
+ local_closures.fini ();
+ }
+
+ void reset ()
+ {
+ hb_set_clear (global_closure);
+ for (unsigned int i = 0; i < local_closures.len; i++)
+ hb_set_clear (local_closures[i]);
+ }
+
+ bool is_valid () const { return valid; }
+ bool valid;
+ hb_set_t *global_closure;
+ hb_vector_t<hb_set_t *> local_closures;
+};
+
+struct ParsedCSOp : OpStr
+{
+ void init (unsigned int subr_num_ = 0)
+ {
+ OpStr::init ();
+ subr_num = subr_num_;
+ drop_flag = false;
+ keep_flag = false;
+ skip_flag = false;
+ }
+
+ void fini () { OpStr::fini (); }
+
+ bool for_drop () const { return drop_flag; }
+ void set_drop () { if (!for_keep ()) drop_flag = true; }
+
+ bool for_keep () const { return keep_flag; }
+ void set_keep () { keep_flag = true; }
+
+ bool for_skip () const { return skip_flag; }
+ void set_skip () { skip_flag = true; }
+
+ unsigned int subr_num;
+
+ protected:
+ bool drop_flag : 1;
+ bool keep_flag : 1;
+ bool skip_flag : 1;
+};
+
+struct ParsedCStr : ParsedValues<ParsedCSOp>
+{
+ void init ()
+ {
+ SUPER::init ();
+ parsed = false;
+ hint_dropped = false;
+ has_prefix_ = false;
+ }
+
+ void add_op (OpCode op, const SubByteStr& substr)
+ {
+ if (!is_parsed ())
+ SUPER::add_op (op, substr);
+ }
+
+ void add_call_op (OpCode op, const SubByteStr& substr, unsigned int subr_num)
+ {
+ if (!is_parsed ())
+ {
+ unsigned int parsed_len = get_count ();
+ if (likely (parsed_len > 0))
+ values[parsed_len-1].set_skip ();
+
+ ParsedCSOp val;
+ val.init (subr_num);
+ SUPER::add_op (op, substr, val);
+ }
+ }
+
+ void set_prefix (const Number &num, OpCode op = OpCode_Invalid)
+ {
+ has_prefix_ = true;
+ prefix_op_ = op;
+ prefix_num_ = num;
+ }
+
+ bool at_end (unsigned int pos) const
+ {
+ return ((pos + 1 >= values.len) /* CFF2 */
+ || (values[pos + 1].op == OpCode_return));
+ }
+
+ bool is_parsed () const { return parsed; }
+ void set_parsed () { parsed = true; }
+
+ bool is_hint_dropped () const { return hint_dropped; }
+ void set_hint_dropped () { hint_dropped = true; }
+
+ bool is_vsindex_dropped () const { return vsindex_dropped; }
+ void set_vsindex_dropped () { vsindex_dropped = true; }
+
+ bool has_prefix () const { return has_prefix_; }
+ OpCode prefix_op () const { return prefix_op_; }
+ const Number &prefix_num () const { return prefix_num_; }
+
+ protected:
+ bool parsed;
+ bool hint_dropped;
+ bool vsindex_dropped;
+ bool has_prefix_;
+ OpCode prefix_op_;
+ Number prefix_num_;
+
+ private:
+ typedef ParsedValues<ParsedCSOp> SUPER;
+};
+
+struct ParsedCStrs : hb_vector_t<ParsedCStr>
+{
+ void init (unsigned int len_ = 0)
+ {
+ SUPER::init ();
+ resize (len_);
+ for (unsigned int i = 0; i < len; i++)
+ (*this)[i].init ();
+ }
+ void fini () { SUPER::fini_deep (); }
+
+ private:
+ typedef hb_vector_t<ParsedCStr> SUPER;
+};
+
+struct SubrSubsetParam
+{
+ void init (ParsedCStr *parsed_charstring_,
+ ParsedCStrs *parsed_global_subrs_, ParsedCStrs *parsed_local_subrs_,
+ hb_set_t *global_closure_, hb_set_t *local_closure_,
+ bool drop_hints_)
+ {
+ parsed_charstring = parsed_charstring_;
+ current_parsed_str = parsed_charstring;
+ parsed_global_subrs = parsed_global_subrs_;
+ parsed_local_subrs = parsed_local_subrs_;
+ global_closure = global_closure_;
+ local_closure = local_closure_;
+ drop_hints = drop_hints_;
+ }
+
+ ParsedCStr *get_parsed_str_for_context (CallContext &context)
+ {
+ switch (context.type)
+ {
+ case CSType_CharString:
+ return parsed_charstring;
+
+ case CSType_LocalSubr:
+ if (likely (context.subr_num < parsed_local_subrs->len))
+ return &(*parsed_local_subrs)[context.subr_num];
+ break;
+
+ case CSType_GlobalSubr:
+ if (likely (context.subr_num < parsed_global_subrs->len))
+ return &(*parsed_global_subrs)[context.subr_num];
+ break;
+ }
+ return nullptr;
+ }
+
+ template <typename ENV>
+ void set_current_str (ENV &env, bool calling)
+ {
+ ParsedCStr *parsed_str = get_parsed_str_for_context (env.context);
+ if (likely (parsed_str != nullptr))
+ {
+ /* If the called subroutine is parsed partially but not completely yet,
+ * it must be because we are calling it recursively.
+ * Handle it as an error. */
+ if (unlikely (calling && !parsed_str->is_parsed () && (parsed_str->values.len > 0)))
+ env.set_error ();
+ else
+ current_parsed_str = parsed_str;
+ }
+ else
+ env.set_error ();
+ }
+
+ ParsedCStr *current_parsed_str;
+
+ ParsedCStr *parsed_charstring;
+ ParsedCStrs *parsed_global_subrs;
+ ParsedCStrs *parsed_local_subrs;
+ hb_set_t *global_closure;
+ hb_set_t *local_closure;
+ bool drop_hints;
+};
+
+struct SubrRemap : Remap
+{
+ void create (hb_set_t *closure)
+ {
+ /* create a remapping of subroutine numbers from old to new.
+ * no optimization based on usage counts. fonttools doesn't appear doing that either.
+ */
+ reset (closure->get_max () + 1);
+ for (hb_codepoint_t old_num = 0; old_num < len; old_num++)
+ {
+ if (hb_set_has (closure, old_num))
+ add (old_num);
+ }
+
+ if (get_count () < 1240)
+ bias = 107;
+ else if (get_count () < 33900)
+ bias = 1131;
+ else
+ bias = 32768;
+ }
+
+ hb_codepoint_t operator[] (unsigned int old_num) const
+ {
+ if (old_num >= len)
+ return CFF_UNDEF_CODE;
+ else
+ return Remap::operator[] (old_num);
+ }
+
+ int biased_num (unsigned int old_num) const
+ {
+ hb_codepoint_t new_num = (*this)[old_num];
+ return (int)new_num - bias;
+ }
+
+ protected:
+ int bias;
+};
+
+struct SubrRemaps
+{
+ SubrRemaps ()
+ {
+ global_remap.init ();
+ local_remaps.init ();
+ }
+
+ ~SubrRemaps () { fini (); }
+
+ void init (unsigned int fdCount)
+ {
+ local_remaps.resize (fdCount);
+ for (unsigned int i = 0; i < fdCount; i++)
+ local_remaps[i].init ();
+ }
+
+ void create (SubrClosures& closures)
+ {
+ global_remap.create (closures.global_closure);
+ for (unsigned int i = 0; i < local_remaps.len; i++)
+ local_remaps[i].create (closures.local_closures[i]);
+ }
+
+ void fini ()
+ {
+ global_remap.fini ();
+ local_remaps.fini_deep ();
+ }
+
+ SubrRemap global_remap;
+ hb_vector_t<SubrRemap> local_remaps;
+};
+
+template <typename SUBSETTER, typename SUBRS, typename ACC, typename ENV, typename OPSET>
+struct SubrSubsetter
+{
+ SubrSubsetter ()
+ {
+ parsed_charstrings.init ();
+ parsed_global_subrs.init ();
+ parsed_local_subrs.init ();
+ }
+
+ ~SubrSubsetter ()
+ {
+ closures.fini ();
+ remaps.fini ();
+ parsed_charstrings.fini_deep ();
+ parsed_global_subrs.fini_deep ();
+ parsed_local_subrs.fini_deep ();
+ }
+
+ /* Subroutine subsetting with --no-desubroutinize runs in phases:
+ *
+ * 1. execute charstrings/subroutines to determine subroutine closures
+ * 2. parse out all operators and numbers
+ * 3. mark hint operators and operands for removal if --no-hinting
+ * 4. re-encode all charstrings and subroutines with new subroutine numbers
+ *
+ * Phases #1 and #2 are done at the same time in collect_subrs ().
+ * Phase #3 walks charstrings/subroutines forward then backward (hence parsing required),
+ * because we can't tell if a number belongs to a hint op until we see the first moveto.
+ *
+ * Assumption: a callsubr/callgsubr operator must immediately follow a (biased) subroutine number
+ * within the same charstring/subroutine, e.g., not split across a charstring and a subroutine.
+ */
+ bool subset (ACC &acc, const hb_vector_t<hb_codepoint_t> &glyphs, bool drop_hints)
+ {
+ closures.init (acc.fdCount);
+ remaps.init (acc.fdCount);
+
+ parsed_charstrings.init (glyphs.len);
+ parsed_global_subrs.init (acc.globalSubrs->count);
+ parsed_local_subrs.resize (acc.fdCount);
+ for (unsigned int i = 0; i < acc.fdCount; i++)
+ {
+ parsed_local_subrs[i].init (acc.privateDicts[i].localSubrs->count);
+ }
+ if (unlikely (!closures.valid))
+ return false;
+
+ /* phase 1 & 2 */
+ for (unsigned int i = 0; i < glyphs.len; i++)
+ {
+ hb_codepoint_t glyph = glyphs[i];
+ const ByteStr str = (*acc.charStrings)[glyph];
+ unsigned int fd = acc.fdSelect->get_fd (glyph);
+ if (unlikely (fd >= acc.fdCount))
+ return false;
+
+ CSInterpreter<ENV, OPSET, SubrSubsetParam> interp;
+ interp.env.init (str, acc, fd);
+
+ SubrSubsetParam param;
+ param.init (&parsed_charstrings[i],
+ &parsed_global_subrs, &parsed_local_subrs[fd],
+ closures.global_closure, closures.local_closures[fd],
+ drop_hints);
+
+ if (unlikely (!interp.interpret (param)))
+ return false;
+
+ /* finalize parsed string esp. copy CFF1 width or CFF2 vsindex to the parsed charstring for encoding */
+ SUBSETTER::finalize_parsed_str (interp.env, param, parsed_charstrings[i]);
+ }
+
+ if (drop_hints)
+ {
+ /* mark hint ops and arguments for drop */
+ for (unsigned int i = 0; i < glyphs.len; i++)
+ {
+ unsigned int fd = acc.fdSelect->get_fd (glyphs[i]);
+ if (unlikely (fd >= acc.fdCount))
+ return false;
+ SubrSubsetParam param;
+ param.init (&parsed_charstrings[i],
+ &parsed_global_subrs, &parsed_local_subrs[fd],
+ closures.global_closure, closures.local_closures[fd],
+ drop_hints);
+
+ DropHintsParam drop;
+ if (drop_hints_in_str (parsed_charstrings[i], param, drop))
+ {
+ parsed_charstrings[i].set_hint_dropped ();
+ if (drop.vsindex_dropped)
+ parsed_charstrings[i].set_vsindex_dropped ();
+ }
+ }
+
+ /* after dropping hints recreate closures of actually used subrs */
+ closures.reset ();
+ for (unsigned int i = 0; i < glyphs.len; i++)
+ {
+ unsigned int fd = acc.fdSelect->get_fd (glyphs[i]);
+ if (unlikely (fd >= acc.fdCount))
+ return false;
+ SubrSubsetParam param;
+ param.init (&parsed_charstrings[i],
+ &parsed_global_subrs, &parsed_local_subrs[fd],
+ closures.global_closure, closures.local_closures[fd],
+ drop_hints);
+ collect_subr_refs_in_str (parsed_charstrings[i], param);
+ }
+ }
+
+ remaps.create (closures);
+
+ return true;
+ }
+
+ bool encode_charstrings (ACC &acc, const hb_vector_t<hb_codepoint_t> &glyphs, StrBuffArray &buffArray) const
+ {
+ if (unlikely (!buffArray.resize (glyphs.len)))
+ return false;
+ for (unsigned int i = 0; i < glyphs.len; i++)
+ {
+ unsigned int fd = acc.fdSelect->get_fd (glyphs[i]);
+ if (unlikely (fd >= acc.fdCount))
+ return false;
+ if (unlikely (!encode_str (parsed_charstrings[i], fd, buffArray[i])))
+ return false;
+ }
+ return true;
+ }
+
+ bool encode_subrs (const ParsedCStrs &subrs, const SubrRemap& remap, unsigned int fd, StrBuffArray &buffArray) const
+ {
+ unsigned int count = remap.get_count ();
+
+ if (unlikely (!buffArray.resize (count)))
+ return false;
+ for (unsigned int old_num = 0; old_num < subrs.len; old_num++)
+ {
+ hb_codepoint_t new_num = remap[old_num];
+ if (new_num != CFF_UNDEF_CODE)
+ {
+ if (unlikely (!encode_str (subrs[old_num], fd, buffArray[new_num])))
+ return false;
+ }
+ }
+ return true;
+ }
+
+ bool encode_globalsubrs (StrBuffArray &buffArray)
+ {
+ return encode_subrs (parsed_global_subrs, remaps.global_remap, 0, buffArray);
+ }
+
+ bool encode_localsubrs (unsigned int fd, StrBuffArray &buffArray) const
+ {
+ return encode_subrs (parsed_local_subrs[fd], remaps.local_remaps[fd], fd, buffArray);
+ }
+
+ protected:
+ struct DropHintsParam
+ {
+ DropHintsParam ()
+ : seen_moveto (false),
+ ends_in_hint (false),
+ vsindex_dropped (false) {}
+
+ bool seen_moveto;
+ bool ends_in_hint;
+ bool vsindex_dropped;
+ };
+
+ bool drop_hints_in_subr (ParsedCStr &str, unsigned int pos,
+ ParsedCStrs &subrs, unsigned int subr_num,
+ const SubrSubsetParam &param, DropHintsParam &drop)
+ {
+ drop.ends_in_hint = false;
+ bool has_hint = drop_hints_in_str (subrs[subr_num], param, drop);
+
+ /* if this subr ends with a stem hint (i.e., not a number a potential argument for moveto),
+ * then this entire subroutine must be a hint. drop its call. */
+ if (drop.ends_in_hint)
+ {
+ str.values[pos].set_drop ();
+ /* if this subr call is at the end of the parent subr, propagate the flag
+ * otherwise reset the flag */
+ if (!str.at_end (pos))
+ drop.ends_in_hint = false;
+ }
+
+ return has_hint;
+ }
+
+ /* returns true if it sees a hint op before the first moveto */
+ bool drop_hints_in_str (ParsedCStr &str, const SubrSubsetParam &param, DropHintsParam &drop)
+ {
+ bool seen_hint = false;
+
+ for (unsigned int pos = 0; pos < str.values.len; pos++)
+ {
+ bool has_hint = false;
+ switch (str.values[pos].op)
+ {
+ case OpCode_callsubr:
+ has_hint = drop_hints_in_subr (str, pos,
+ *param.parsed_local_subrs, str.values[pos].subr_num,
+ param, drop);
+
+ break;
+
+ case OpCode_callgsubr:
+ has_hint = drop_hints_in_subr (str, pos,
+ *param.parsed_global_subrs, str.values[pos].subr_num,
+ param, drop);
+ break;
+
+ case OpCode_rmoveto:
+ case OpCode_hmoveto:
+ case OpCode_vmoveto:
+ drop.seen_moveto = true;
+ break;
+
+ case OpCode_hintmask:
+ case OpCode_cntrmask:
+ if (drop.seen_moveto)
+ {
+ str.values[pos].set_drop ();
+ break;
+ }
+ HB_FALLTHROUGH;
+
+ case OpCode_hstemhm:
+ case OpCode_vstemhm:
+ case OpCode_hstem:
+ case OpCode_vstem:
+ has_hint = true;
+ str.values[pos].set_drop ();
+ if (str.at_end (pos))
+ drop.ends_in_hint = true;
+ break;
+
+ case OpCode_dotsection:
+ str.values[pos].set_drop ();
+ break;
+
+ default:
+ /* NONE */
+ break;
+ }
+ if (has_hint)
+ {
+ for (int i = pos - 1; i >= 0; i--)
+ {
+ ParsedCSOp &csop = str.values[(unsigned)i];
+ if (csop.for_drop ())
+ break;
+ csop.set_drop ();
+ if (csop.op == OpCode_vsindexcs)
+ drop.vsindex_dropped = true;
+ }
+ seen_hint |= has_hint;
+ }
+ }
+
+ return seen_hint;
+ }
+
+ void collect_subr_refs_in_subr (ParsedCStr &str, unsigned int pos,
+ unsigned int subr_num, ParsedCStrs &subrs,
+ hb_set_t *closure,
+ const SubrSubsetParam &param)
+ {
+ hb_set_add (closure, subr_num);
+ collect_subr_refs_in_str (subrs[subr_num], param);
+ }
+
+ void collect_subr_refs_in_str (ParsedCStr &str, const SubrSubsetParam &param)
+ {
+ for (unsigned int pos = 0; pos < str.values.len; pos++)
+ {
+ if (!str.values[pos].for_drop ())
+ {
+ switch (str.values[pos].op)
+ {
+ case OpCode_callsubr:
+ collect_subr_refs_in_subr (str, pos,
+ str.values[pos].subr_num, *param.parsed_local_subrs,
+ param.local_closure, param);
+ break;
+
+ case OpCode_callgsubr:
+ collect_subr_refs_in_subr (str, pos,
+ str.values[pos].subr_num, *param.parsed_global_subrs,
+ param.global_closure, param);
+ break;
+
+ default: break;
+ }
+ }
+ }
+ }
+
+ bool encode_str (const ParsedCStr &str, const unsigned int fd, StrBuff &buff) const
+ {
+ buff.init ();
+ StrEncoder encoder (buff);
+ encoder.reset ();
+ /* if a prefix (CFF1 width or CFF2 vsindex) has been removed along with hints,
+ * re-insert it at the beginning of charstreing */
+ if (str.has_prefix () && str.is_hint_dropped ())
+ {
+ encoder.encode_num (str.prefix_num ());
+ if (str.prefix_op () != OpCode_Invalid)
+ encoder.encode_op (str.prefix_op ());
+ }
+ for (unsigned int i = 0; i < str.get_count(); i++)
+ {
+ const ParsedCSOp &opstr = str.values[i];
+ if (!opstr.for_drop () && !opstr.for_skip ())
+ {
+ switch (opstr.op)
+ {
+ case OpCode_callsubr:
+ encoder.encode_int (remaps.local_remaps[fd].biased_num (opstr.subr_num));
+ encoder.encode_op (OpCode_callsubr);
+ break;
+
+ case OpCode_callgsubr:
+ encoder.encode_int (remaps.global_remap.biased_num (opstr.subr_num));
+ encoder.encode_op (OpCode_callgsubr);
+ break;
+
+ default:
+ encoder.copy_str (opstr.str);
+ break;
+ }
+ }
+ }
+ return !encoder.is_error ();
+ }
+
+ protected:
+ SubrClosures closures;
+
+ ParsedCStrs parsed_charstrings;
+ ParsedCStrs parsed_global_subrs;
+ hb_vector_t<ParsedCStrs> parsed_local_subrs;
+
+ SubrRemaps remaps;
+
+ private:
+ typedef typename SUBRS::count_type subr_count_type;
+};
+}; /* namespace CFF */
+
+HB_INTERNAL bool
+hb_plan_subset_cff_fdselect (const hb_vector_t<hb_codepoint_t> &glyphs,
+ unsigned int fdCount,
+ const CFF::FDSelect &src, /* IN */
+ unsigned int &subset_fd_count /* OUT */,
+ unsigned int &subset_fdselect_size /* OUT */,
+ unsigned int &subset_fdselect_format /* OUT */,
+ hb_vector_t<CFF::code_pair> &fdselect_ranges /* OUT */,
+ CFF::Remap &fdmap /* OUT */);
+
+HB_INTERNAL bool
+hb_serialize_cff_fdselect (hb_serialize_context_t *c,
+ unsigned int num_glyphs,
+ const CFF::FDSelect &src,
+ unsigned int fd_count,
+ unsigned int fdselect_format,
+ unsigned int size,
+ const hb_vector_t<CFF::code_pair> &fdselect_ranges);
+
+#endif /* HB_SUBSET_CFF_COMMON_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff1.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff1.cc
new file mode 100644
index 00000000000..09364a22cea
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff1.cc
@@ -0,0 +1,1108 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+
+#include "hb-open-type.hh"
+#include "hb-ot-cff1-table.hh"
+#include "hb-set.h"
+#include "hb-subset-cff1.hh"
+#include "hb-subset-plan.hh"
+#include "hb-subset-cff-common.hh"
+#include "hb-cff1-interp-cs.hh"
+
+using namespace CFF;
+
+struct RemapSID : Remap
+{
+ unsigned int add (unsigned int sid)
+ {
+ if ((sid != CFF_UNDEF_SID) && !is_std_std (sid))
+ return offset_sid (Remap::add (unoffset_sid (sid)));
+ else
+ return sid;
+ }
+
+ unsigned int operator[] (unsigned int sid) const
+ {
+ if (is_std_std (sid) || (sid == CFF_UNDEF_SID))
+ return sid;
+ else
+ return offset_sid (Remap::operator [] (unoffset_sid (sid)));
+ }
+
+ static const unsigned int num_std_strings = 391;
+
+ static bool is_std_std (unsigned int sid) { return sid < num_std_strings; }
+ static unsigned int offset_sid (unsigned int sid) { return sid + num_std_strings; }
+ static unsigned int unoffset_sid (unsigned int sid) { return sid - num_std_strings; }
+};
+
+struct CFF1SubTableOffsets : CFFSubTableOffsets
+{
+ CFF1SubTableOffsets ()
+ : CFFSubTableOffsets (),
+ nameIndexOffset (0),
+ encodingOffset (0)
+ {
+ stringIndexInfo.init ();
+ charsetInfo.init ();
+ privateDictInfo.init ();
+ }
+
+ unsigned int nameIndexOffset;
+ TableInfo stringIndexInfo;
+ unsigned int encodingOffset;
+ TableInfo charsetInfo;
+ TableInfo privateDictInfo;
+};
+
+/* a copy of a parsed out CFF1TopDictValues augmented with additional operators */
+struct CFF1TopDictValuesMod : CFF1TopDictValues
+{
+ void init (const CFF1TopDictValues *base_= &Null(CFF1TopDictValues))
+ {
+ SUPER::init ();
+ base = base_;
+ }
+
+ void fini () { SUPER::fini (); }
+
+ unsigned get_count () const { return base->get_count () + SUPER::get_count (); }
+ const CFF1TopDictVal &get_value (unsigned int i) const
+ {
+ if (i < base->get_count ())
+ return (*base)[i];
+ else
+ return SUPER::values[i - base->get_count ()];
+ }
+ const CFF1TopDictVal &operator [] (unsigned int i) const { return get_value (i); }
+
+ void reassignSIDs (const RemapSID& sidmap)
+ {
+ for (unsigned int i = 0; i < NameDictValues::ValCount; i++)
+ nameSIDs[i] = sidmap[base->nameSIDs[i]];
+ }
+
+ protected:
+ typedef CFF1TopDictValues SUPER;
+ const CFF1TopDictValues *base;
+};
+
+struct TopDictModifiers
+{
+ TopDictModifiers (const CFF1SubTableOffsets &offsets_,
+ const unsigned int (&nameSIDs_)[NameDictValues::ValCount])
+ : offsets (offsets_),
+ nameSIDs (nameSIDs_)
+ {}
+
+ const CFF1SubTableOffsets &offsets;
+ const unsigned int (&nameSIDs)[NameDictValues::ValCount];
+};
+
+struct CFF1TopDict_OpSerializer : CFFTopDict_OpSerializer<CFF1TopDictVal>
+{
+ bool serialize (hb_serialize_context_t *c,
+ const CFF1TopDictVal &opstr,
+ const TopDictModifiers &mod) const
+ {
+ TRACE_SERIALIZE (this);
+
+ OpCode op = opstr.op;
+ switch (op)
+ {
+ case OpCode_charset:
+ return_trace (FontDict::serialize_offset4_op(c, op, mod.offsets.charsetInfo.offset));
+
+ case OpCode_Encoding:
+ return_trace (FontDict::serialize_offset4_op(c, op, mod.offsets.encodingOffset));
+
+ case OpCode_Private:
+ {
+ if (unlikely (!UnsizedByteStr::serialize_int2 (c, mod.offsets.privateDictInfo.size)))
+ return_trace (false);
+ if (unlikely (!UnsizedByteStr::serialize_int4 (c, mod.offsets.privateDictInfo.offset)))
+ return_trace (false);
+ HBUINT8 *p = c->allocate_size<HBUINT8> (1);
+ if (unlikely (p == nullptr)) return_trace (false);
+ p->set (OpCode_Private);
+ }
+ break;
+
+ case OpCode_version:
+ case OpCode_Notice:
+ case OpCode_Copyright:
+ case OpCode_FullName:
+ case OpCode_FamilyName:
+ case OpCode_Weight:
+ case OpCode_PostScript:
+ case OpCode_BaseFontName:
+ case OpCode_FontName:
+ return_trace (FontDict::serialize_offset2_op(c, op, mod.nameSIDs[NameDictValues::name_op_to_index (op)]));
+
+ case OpCode_ROS:
+ {
+ /* for registry & ordering, reassigned SIDs are serialized
+ * for supplement, the original byte string is copied along with the op code */
+ OpStr supp_op;
+ supp_op.op = op;
+ supp_op.str.str = opstr.str.str + opstr.last_arg_offset;
+ if ( unlikely (!(opstr.str.len >= opstr.last_arg_offset + 3)))
+ return_trace (false);
+ supp_op.str.len = opstr.str.len - opstr.last_arg_offset;
+ return_trace (UnsizedByteStr::serialize_int2 (c, mod.nameSIDs[NameDictValues::registry]) &&
+ UnsizedByteStr::serialize_int2 (c, mod.nameSIDs[NameDictValues::ordering]) &&
+ copy_opstr (c, supp_op));
+ }
+ default:
+ return_trace (CFFTopDict_OpSerializer<CFF1TopDictVal>::serialize (c, opstr, mod.offsets));
+ }
+ return_trace (true);
+ }
+
+ unsigned int calculate_serialized_size (const CFF1TopDictVal &opstr) const
+ {
+ OpCode op = opstr.op;
+ switch (op)
+ {
+ case OpCode_charset:
+ case OpCode_Encoding:
+ return OpCode_Size (OpCode_longintdict) + 4 + OpCode_Size (op);
+
+ case OpCode_Private:
+ return OpCode_Size (OpCode_longintdict) + 4 + OpCode_Size (OpCode_shortint) + 2 + OpCode_Size (OpCode_Private);
+
+ case OpCode_version:
+ case OpCode_Notice:
+ case OpCode_Copyright:
+ case OpCode_FullName:
+ case OpCode_FamilyName:
+ case OpCode_Weight:
+ case OpCode_PostScript:
+ case OpCode_BaseFontName:
+ case OpCode_FontName:
+ return OpCode_Size (OpCode_shortint) + 2 + OpCode_Size (op);
+
+ case OpCode_ROS:
+ return ((OpCode_Size (OpCode_shortint) + 2) * 2) + (opstr.str.len - opstr.last_arg_offset)/* supplement + op */;
+
+ default:
+ return CFFTopDict_OpSerializer<CFF1TopDictVal>::calculate_serialized_size (opstr);
+ }
+ }
+};
+
+struct FontDictValuesMod
+{
+ void init (const CFF1FontDictValues *base_,
+ unsigned int fontName_,
+ const TableInfo &privateDictInfo_)
+ {
+ base = base_;
+ fontName = fontName_;
+ privateDictInfo = privateDictInfo_;
+ }
+
+ unsigned get_count () const { return base->get_count (); }
+
+ const OpStr &operator [] (unsigned int i) const { return (*base)[i]; }
+
+ const CFF1FontDictValues *base;
+ TableInfo privateDictInfo;
+ unsigned int fontName;
+};
+
+struct CFF1FontDict_OpSerializer : CFFFontDict_OpSerializer
+{
+ bool serialize (hb_serialize_context_t *c,
+ const OpStr &opstr,
+ const FontDictValuesMod &mod) const
+ {
+ TRACE_SERIALIZE (this);
+
+ if (opstr.op == OpCode_FontName)
+ return_trace (FontDict::serialize_uint2_op (c, opstr.op, mod.fontName));
+ else
+ return_trace (SUPER::serialize (c, opstr, mod.privateDictInfo));
+ }
+
+ unsigned int calculate_serialized_size (const OpStr &opstr) const
+ {
+ if (opstr.op == OpCode_FontName)
+ return OpCode_Size (OpCode_shortint) + 2 + OpCode_Size (OpCode_FontName);
+ else
+ return SUPER::calculate_serialized_size (opstr);
+ }
+
+ private:
+ typedef CFFFontDict_OpSerializer SUPER;
+};
+
+struct CFF1CSOpSet_Flatten : CFF1CSOpSet<CFF1CSOpSet_Flatten, FlattenParam>
+{
+ static void flush_args_and_op (OpCode op, CFF1CSInterpEnv &env, FlattenParam& param)
+ {
+ if (env.arg_start > 0)
+ flush_width (env, param);
+
+ switch (op)
+ {
+ case OpCode_hstem:
+ case OpCode_hstemhm:
+ case OpCode_vstem:
+ case OpCode_vstemhm:
+ case OpCode_hintmask:
+ case OpCode_cntrmask:
+ case OpCode_dotsection:
+ if (param.drop_hints)
+ {
+ env.clear_args ();
+ return;
+ }
+ HB_FALLTHROUGH;
+
+ default:
+ SUPER::flush_args_and_op (op, env, param);
+ break;
+ }
+ }
+ static void flush_args (CFF1CSInterpEnv &env, FlattenParam& param)
+ {
+ StrEncoder encoder (param.flatStr);
+ for (unsigned int i = env.arg_start; i < env.argStack.get_count (); i++)
+ encoder.encode_num (env.eval_arg (i));
+ SUPER::flush_args (env, param);
+ }
+
+ static void flush_op (OpCode op, CFF1CSInterpEnv &env, FlattenParam& param)
+ {
+ StrEncoder encoder (param.flatStr);
+ encoder.encode_op (op);
+ }
+
+ static void flush_width (CFF1CSInterpEnv &env, FlattenParam& param)
+ {
+ assert (env.has_width);
+ StrEncoder encoder (param.flatStr);
+ encoder.encode_num (env.width);
+ }
+
+ static void flush_hintmask (OpCode op, CFF1CSInterpEnv &env, FlattenParam& param)
+ {
+ SUPER::flush_hintmask (op, env, param);
+ if (!param.drop_hints)
+ {
+ StrEncoder encoder (param.flatStr);
+ for (unsigned int i = 0; i < env.hintmask_size; i++)
+ encoder.encode_byte (env.substr[i]);
+ }
+ }
+
+ private:
+ typedef CFF1CSOpSet<CFF1CSOpSet_Flatten, FlattenParam> SUPER;
+};
+
+struct RangeList : hb_vector_t<code_pair>
+{
+ /* replace the first glyph ID in the "glyph" field each range with a nLeft value */
+ bool finalize (unsigned int last_glyph)
+ {
+ bool two_byte = false;
+ for (unsigned int i = (*this).len; i > 0; i--)
+ {
+ code_pair &pair = (*this)[i - 1];
+ unsigned int nLeft = last_glyph - pair.glyph - 1;
+ if (nLeft >= 0x100)
+ two_byte = true;
+ last_glyph = pair.glyph;
+ pair.glyph = nLeft;
+ }
+ return two_byte;
+ }
+};
+
+struct CFF1CSOpSet_SubrSubset : CFF1CSOpSet<CFF1CSOpSet_SubrSubset, SubrSubsetParam>
+{
+ static void process_op (OpCode op, CFF1CSInterpEnv &env, SubrSubsetParam& param)
+ {
+ switch (op) {
+
+ case OpCode_return:
+ param.current_parsed_str->add_op (op, env.substr);
+ param.current_parsed_str->set_parsed ();
+ env.returnFromSubr ();
+ param.set_current_str (env, false);
+ break;
+
+ case OpCode_endchar:
+ param.current_parsed_str->add_op (op, env.substr);
+ param.current_parsed_str->set_parsed ();
+ SUPER::process_op (op, env, param);
+ break;
+
+ case OpCode_callsubr:
+ process_call_subr (op, CSType_LocalSubr, env, param, env.localSubrs, param.local_closure);
+ break;
+
+ case OpCode_callgsubr:
+ process_call_subr (op, CSType_GlobalSubr, env, param, env.globalSubrs, param.global_closure);
+ break;
+
+ default:
+ SUPER::process_op (op, env, param);
+ param.current_parsed_str->add_op (op, env.substr);
+ break;
+ }
+ }
+
+ protected:
+ static void process_call_subr (OpCode op, CSType type,
+ CFF1CSInterpEnv &env, SubrSubsetParam& param,
+ CFF1BiasedSubrs& subrs, hb_set_t *closure)
+ {
+ SubByteStr substr = env.substr;
+ env.callSubr (subrs, type);
+ param.current_parsed_str->add_call_op (op, substr, env.context.subr_num);
+ hb_set_add (closure, env.context.subr_num);
+ param.set_current_str (env, true);
+ }
+
+ private:
+ typedef CFF1CSOpSet<CFF1CSOpSet_SubrSubset, SubrSubsetParam> SUPER;
+};
+
+struct CFF1SubrSubsetter : SubrSubsetter<CFF1SubrSubsetter, CFF1Subrs, const OT::cff1::accelerator_subset_t, CFF1CSInterpEnv, CFF1CSOpSet_SubrSubset>
+{
+ static void finalize_parsed_str (CFF1CSInterpEnv &env, SubrSubsetParam& param, ParsedCStr &charstring)
+ {
+ /* insert width at the beginning of the charstring as necessary */
+ if (env.has_width)
+ charstring.set_prefix (env.width);
+
+ /* subroutines/charstring left on the call stack are legally left unmarked
+ * unmarked when a subroutine terminates with endchar. mark them.
+ */
+ param.current_parsed_str->set_parsed ();
+ for (unsigned int i = 0; i < env.callStack.get_count (); i++)
+ {
+ ParsedCStr *parsed_str = param.get_parsed_str_for_context (env.callStack[i]);
+ if (likely (parsed_str != nullptr))
+ parsed_str->set_parsed ();
+ else
+ env.set_error ();
+ }
+ }
+};
+
+struct cff_subset_plan {
+ cff_subset_plan ()
+ : final_size (0),
+ offsets (),
+ orig_fdcount (0),
+ subset_fdcount (1),
+ subset_fdselect_format (0),
+ drop_hints (false),
+ desubroutinize(false)
+ {
+ topdict_sizes.init ();
+ topdict_sizes.resize (1);
+ topdict_mod.init ();
+ subset_fdselect_ranges.init ();
+ fdmap.init ();
+ subset_charstrings.init ();
+ subset_globalsubrs.init ();
+ subset_localsubrs.init ();
+ fontdicts_mod.init ();
+ subset_enc_code_ranges.init ();
+ subset_enc_supp_codes.init ();
+ subset_charset_ranges.init ();
+ sidmap.init ();
+ for (unsigned int i = 0; i < NameDictValues::ValCount; i++)
+ topDictModSIDs[i] = CFF_UNDEF_SID;
+ }
+
+ ~cff_subset_plan ()
+ {
+ topdict_sizes.fini ();
+ topdict_mod.fini ();
+ subset_fdselect_ranges.fini ();
+ fdmap.fini ();
+ subset_charstrings.fini_deep ();
+ subset_globalsubrs.fini_deep ();
+ subset_localsubrs.fini_deep ();
+ fontdicts_mod.fini ();
+ subset_enc_code_ranges.fini ();
+ subset_enc_supp_codes.init ();
+ subset_charset_ranges.fini ();
+ sidmap.fini ();
+ fontdicts_mod.fini ();
+ }
+
+ unsigned int plan_subset_encoding (const OT::cff1::accelerator_subset_t &acc, hb_subset_plan_t *plan)
+ {
+ const Encoding *encoding = acc.encoding;
+ unsigned int size0, size1, supp_size;
+ hb_codepoint_t code, last_code = CFF_UNDEF_CODE;
+ hb_vector_t<hb_codepoint_t> supp_codes;
+
+ subset_enc_code_ranges.resize (0);
+ supp_size = 0;
+ supp_codes.init ();
+
+ subset_enc_num_codes = plan->glyphs.len - 1;
+ unsigned int glyph;
+ for (glyph = 1; glyph < plan->glyphs.len; glyph++)
+ {
+ hb_codepoint_t orig_glyph = plan->glyphs[glyph];
+ code = acc.glyph_to_code (orig_glyph);
+ if (code == CFF_UNDEF_CODE)
+ {
+ subset_enc_num_codes = glyph - 1;
+ break;
+ }
+
+ if (code != last_code + 1)
+ {
+ code_pair pair = { code, glyph };
+ subset_enc_code_ranges.push (pair);
+ }
+ last_code = code;
+
+ if (encoding != &Null(Encoding))
+ {
+ hb_codepoint_t sid = acc.glyph_to_sid (orig_glyph);
+ encoding->get_supplement_codes (sid, supp_codes);
+ for (unsigned int i = 0; i < supp_codes.len; i++)
+ {
+ code_pair pair = { supp_codes[i], sid };
+ subset_enc_supp_codes.push (pair);
+ }
+ supp_size += SuppEncoding::static_size * supp_codes.len;
+ }
+ }
+ supp_codes.fini ();
+
+ subset_enc_code_ranges.finalize (glyph);
+
+ assert (subset_enc_num_codes <= 0xFF);
+ size0 = Encoding0::min_size + HBUINT8::static_size * subset_enc_num_codes;
+ size1 = Encoding1::min_size + Encoding1_Range::static_size * subset_enc_code_ranges.len;
+
+ if (size0 < size1)
+ subset_enc_format = 0;
+ else
+ subset_enc_format = 1;
+
+ return Encoding::calculate_serialized_size (
+ subset_enc_format,
+ subset_enc_format? subset_enc_code_ranges.len: subset_enc_num_codes,
+ subset_enc_supp_codes.len);
+ }
+
+ unsigned int plan_subset_charset (const OT::cff1::accelerator_subset_t &acc, hb_subset_plan_t *plan)
+ {
+ unsigned int size0, size_ranges;
+ hb_codepoint_t sid, last_sid = CFF_UNDEF_CODE;
+
+ subset_charset_ranges.resize (0);
+ unsigned int glyph;
+ for (glyph = 1; glyph < plan->glyphs.len; glyph++)
+ {
+ hb_codepoint_t orig_glyph = plan->glyphs[glyph];
+ sid = acc.glyph_to_sid (orig_glyph);
+
+ if (!acc.is_CID ())
+ sid = sidmap.add (sid);
+
+ if (sid != last_sid + 1)
+ {
+ code_pair pair = { sid, glyph };
+ subset_charset_ranges.push (pair);
+ }
+ last_sid = sid;
+ }
+
+ bool two_byte = subset_charset_ranges.finalize (glyph);
+
+ size0 = Charset0::min_size + HBUINT16::static_size * (plan->glyphs.len - 1);
+ if (!two_byte)
+ size_ranges = Charset1::min_size + Charset1_Range::static_size * subset_charset_ranges.len;
+ else
+ size_ranges = Charset2::min_size + Charset2_Range::static_size * subset_charset_ranges.len;
+
+ if (size0 < size_ranges)
+ subset_charset_format = 0;
+ else if (!two_byte)
+ subset_charset_format = 1;
+ else
+ subset_charset_format = 2;
+
+ return Charset::calculate_serialized_size (
+ subset_charset_format,
+ subset_charset_format? subset_charset_ranges.len: plan->glyphs.len);
+ }
+
+ bool collect_sids_in_dicts (const OT::cff1::accelerator_subset_t &acc)
+ {
+ if (unlikely (!sidmap.reset (acc.stringIndex->count)))
+ return false;
+
+ for (unsigned int i = 0; i < NameDictValues::ValCount; i++)
+ {
+ unsigned int sid = acc.topDict.nameSIDs[i];
+ if (sid != CFF_UNDEF_SID)
+ {
+ (void)sidmap.add (sid);
+ topDictModSIDs[i] = sidmap[sid];
+ }
+ }
+
+ if (acc.fdArray != &Null(CFF1FDArray))
+ for (unsigned int i = 0; i < orig_fdcount; i++)
+ if (fdmap.includes (i))
+ (void)sidmap.add (acc.fontDicts[i].fontName);
+
+ return true;
+ }
+
+ bool create (const OT::cff1::accelerator_subset_t &acc,
+ hb_subset_plan_t *plan)
+ {
+ /* make sure notdef is first */
+ if ((plan->glyphs.len == 0) || (plan->glyphs[0] != 0)) return false;
+
+ final_size = 0;
+ num_glyphs = plan->glyphs.len;
+ orig_fdcount = acc.fdCount;
+ drop_hints = plan->drop_hints;
+ desubroutinize = plan->desubroutinize;
+
+ /* check whether the subset renumbers any glyph IDs */
+ gid_renum = false;
+ for (unsigned int glyph = 0; glyph < plan->glyphs.len; glyph++)
+ {
+ if (plan->glyphs[glyph] != glyph) {
+ gid_renum = true;
+ break;
+ }
+ }
+
+ subset_charset = gid_renum || !acc.is_predef_charset ();
+ subset_encoding = !acc.is_CID() && !acc.is_predef_encoding ();
+
+ /* CFF header */
+ final_size += OT::cff1::static_size;
+
+ /* Name INDEX */
+ offsets.nameIndexOffset = final_size;
+ final_size += acc.nameIndex->get_size ();
+
+ /* top dict INDEX */
+ {
+ /* Add encoding/charset to a (copy of) top dict as necessary */
+ topdict_mod.init (&acc.topDict);
+ bool need_to_add_enc = (subset_encoding && !acc.topDict.has_op (OpCode_Encoding));
+ bool need_to_add_set = (subset_charset && !acc.topDict.has_op (OpCode_charset));
+ if (need_to_add_enc || need_to_add_set)
+ {
+ if (need_to_add_enc)
+ topdict_mod.add_op (OpCode_Encoding);
+ if (need_to_add_set)
+ topdict_mod.add_op (OpCode_charset);
+ }
+ offsets.topDictInfo.offset = final_size;
+ CFF1TopDict_OpSerializer topSzr;
+ unsigned int topDictSize = TopDict::calculate_serialized_size (topdict_mod, topSzr);
+ offsets.topDictInfo.offSize = calcOffSize(topDictSize);
+ if (unlikely (offsets.topDictInfo.offSize > 4))
+ return false;
+ final_size += CFF1IndexOf<TopDict>::calculate_serialized_size<CFF1TopDictValuesMod>
+ (offsets.topDictInfo.offSize,
+ &topdict_mod, 1, topdict_sizes, topSzr);
+ }
+
+ /* Determine re-mapping of font index as fdmap among other info */
+ if (acc.fdSelect != &Null(CFF1FDSelect))
+ {
+ if (unlikely (!hb_plan_subset_cff_fdselect (plan->glyphs,
+ orig_fdcount,
+ *acc.fdSelect,
+ subset_fdcount,
+ offsets.FDSelectInfo.size,
+ subset_fdselect_format,
+ subset_fdselect_ranges,
+ fdmap)))
+ return false;
+ }
+ else
+ fdmap.identity (1);
+
+ /* remove unused SIDs & reassign SIDs */
+ {
+ /* SIDs for name strings in dicts are added before glyph names so they fit in 16-bit int range */
+ if (unlikely (!collect_sids_in_dicts (acc)))
+ return false;
+ if (unlikely (sidmap.get_count () > 0x8000)) /* assumption: a dict won't reference that many strings */
+ return false;
+ if (subset_charset)
+ offsets.charsetInfo.size = plan_subset_charset (acc, plan);
+
+ topdict_mod.reassignSIDs (sidmap);
+ }
+
+ /* String INDEX */
+ {
+ offsets.stringIndexInfo.offset = final_size;
+ offsets.stringIndexInfo.size = acc.stringIndex->calculate_serialized_size (offsets.stringIndexInfo.offSize, sidmap);
+ final_size += offsets.stringIndexInfo.size;
+ }
+
+ if (desubroutinize)
+ {
+ /* Flatten global & local subrs */
+ SubrFlattener<const OT::cff1::accelerator_subset_t, CFF1CSInterpEnv, CFF1CSOpSet_Flatten>
+ flattener(acc, plan->glyphs, plan->drop_hints);
+ if (!flattener.flatten (subset_charstrings))
+ return false;
+
+ /* no global/local subroutines */
+ offsets.globalSubrsInfo.size = CFF1Subrs::calculate_serialized_size (1, 0, 0);
+ }
+ else
+ {
+ /* Subset subrs: collect used subroutines, leaving all unused ones behind */
+ if (!subr_subsetter.subset (acc, plan->glyphs, plan->drop_hints))
+ return false;
+
+ /* encode charstrings, global subrs, local subrs with new subroutine numbers */
+ if (!subr_subsetter.encode_charstrings (acc, plan->glyphs, subset_charstrings))
+ return false;
+
+ if (!subr_subsetter.encode_globalsubrs (subset_globalsubrs))
+ return false;
+
+ /* global subrs */
+ unsigned int dataSize = subset_globalsubrs.total_size ();
+ offsets.globalSubrsInfo.offSize = calcOffSize (dataSize);
+ if (unlikely (offsets.globalSubrsInfo.offSize > 4))
+ return false;
+ offsets.globalSubrsInfo.size = CFF1Subrs::calculate_serialized_size (offsets.globalSubrsInfo.offSize, subset_globalsubrs.len, dataSize);
+
+ /* local subrs */
+ if (!offsets.localSubrsInfos.resize (orig_fdcount))
+ return false;
+ if (!subset_localsubrs.resize (orig_fdcount))
+ return false;
+ for (unsigned int fd = 0; fd < orig_fdcount; fd++)
+ {
+ subset_localsubrs[fd].init ();
+ offsets.localSubrsInfos[fd].init ();
+ if (fdmap.includes (fd))
+ {
+ if (!subr_subsetter.encode_localsubrs (fd, subset_localsubrs[fd]))
+ return false;
+
+ unsigned int dataSize = subset_localsubrs[fd].total_size ();
+ if (dataSize > 0)
+ {
+ offsets.localSubrsInfos[fd].offset = final_size;
+ offsets.localSubrsInfos[fd].offSize = calcOffSize (dataSize);
+ if (unlikely (offsets.localSubrsInfos[fd].offSize > 4))
+ return false;
+ offsets.localSubrsInfos[fd].size = CFF1Subrs::calculate_serialized_size (offsets.localSubrsInfos[fd].offSize, subset_localsubrs[fd].len, dataSize);
+ }
+ }
+ }
+ }
+
+ /* global subrs */
+ offsets.globalSubrsInfo.offset = final_size;
+ final_size += offsets.globalSubrsInfo.size;
+
+ /* Encoding */
+ if (!subset_encoding)
+ offsets.encodingOffset = acc.topDict.EncodingOffset;
+ else
+ {
+ offsets.encodingOffset = final_size;
+ final_size += plan_subset_encoding (acc, plan);
+ }
+
+ /* Charset */
+ if (!subset_charset && acc.is_predef_charset ())
+ offsets.charsetInfo.offset = acc.topDict.CharsetOffset;
+ else
+ offsets.charsetInfo.offset = final_size;
+ final_size += offsets.charsetInfo.size;
+
+ /* FDSelect */
+ if (acc.fdSelect != &Null(CFF1FDSelect))
+ {
+ offsets.FDSelectInfo.offset = final_size;
+ final_size += offsets.FDSelectInfo.size;
+ }
+
+ /* FDArray (FDIndex) */
+ if (acc.fdArray != &Null(CFF1FDArray)) {
+ offsets.FDArrayInfo.offset = final_size;
+ CFF1FontDict_OpSerializer fontSzr;
+ unsigned int dictsSize = 0;
+ for (unsigned int i = 0; i < acc.fontDicts.len; i++)
+ if (fdmap.includes (i))
+ dictsSize += FontDict::calculate_serialized_size (acc.fontDicts[i], fontSzr);
+
+ offsets.FDArrayInfo.offSize = calcOffSize (dictsSize);
+ if (unlikely (offsets.FDArrayInfo.offSize > 4))
+ return false;
+ final_size += CFF1Index::calculate_serialized_size (offsets.FDArrayInfo.offSize, subset_fdcount, dictsSize);
+ }
+
+ /* CharStrings */
+ {
+ offsets.charStringsInfo.offset = final_size;
+ unsigned int dataSize = subset_charstrings.total_size ();
+ offsets.charStringsInfo.offSize = calcOffSize (dataSize);
+ if (unlikely (offsets.charStringsInfo.offSize > 4))
+ return false;
+ final_size += CFF1CharStrings::calculate_serialized_size (offsets.charStringsInfo.offSize, plan->glyphs.len, dataSize);
+ }
+
+ /* private dicts & local subrs */
+ offsets.privateDictInfo.offset = final_size;
+ for (unsigned int i = 0; i < orig_fdcount; i++)
+ {
+ if (fdmap.includes (i))
+ {
+ bool has_localsubrs = offsets.localSubrsInfos[i].size > 0;
+ CFFPrivateDict_OpSerializer privSzr (desubroutinize, plan->drop_hints);
+ unsigned int priv_size = PrivateDict::calculate_serialized_size (acc.privateDicts[i], privSzr, has_localsubrs);
+ TableInfo privInfo = { final_size, priv_size, 0 };
+ FontDictValuesMod fontdict_mod;
+ if (!acc.is_CID ())
+ fontdict_mod.init ( &Null(CFF1FontDictValues), CFF_UNDEF_SID, privInfo );
+ else
+ fontdict_mod.init ( &acc.fontDicts[i], sidmap[acc.fontDicts[i].fontName], privInfo );
+ fontdicts_mod.push (fontdict_mod);
+ final_size += privInfo.size;
+
+ if (!plan->desubroutinize && has_localsubrs)
+ {
+ offsets.localSubrsInfos[i].offset = final_size;
+ final_size += offsets.localSubrsInfos[i].size;
+ }
+ }
+ }
+
+ if (!acc.is_CID ())
+ offsets.privateDictInfo = fontdicts_mod[0].privateDictInfo;
+
+ return ((subset_charstrings.len == plan->glyphs.len)
+ && (fontdicts_mod.len == subset_fdcount));
+ }
+
+ unsigned int get_final_size () const { return final_size; }
+
+ unsigned int final_size;
+ hb_vector_t<unsigned int> topdict_sizes;
+ CFF1TopDictValuesMod topdict_mod;
+ CFF1SubTableOffsets offsets;
+
+ unsigned int num_glyphs;
+ unsigned int orig_fdcount;
+ unsigned int subset_fdcount;
+ unsigned int subset_fdselect_format;
+ hb_vector_t<code_pair> subset_fdselect_ranges;
+
+ /* font dict index remap table from fullset FDArray to subset FDArray.
+ * set to CFF_UNDEF_CODE if excluded from subset */
+ Remap fdmap;
+
+ StrBuffArray subset_charstrings;
+ StrBuffArray subset_globalsubrs;
+ hb_vector_t<StrBuffArray> subset_localsubrs;
+ hb_vector_t<FontDictValuesMod> fontdicts_mod;
+
+ bool drop_hints;
+
+ bool gid_renum;
+ bool subset_encoding;
+ uint8_t subset_enc_format;
+ unsigned int subset_enc_num_codes;
+ RangeList subset_enc_code_ranges;
+ hb_vector_t<code_pair> subset_enc_supp_codes;
+
+ uint8_t subset_charset_format;
+ RangeList subset_charset_ranges;
+ bool subset_charset;
+
+ RemapSID sidmap;
+ unsigned int topDictModSIDs[NameDictValues::ValCount];
+
+ bool desubroutinize;
+ CFF1SubrSubsetter subr_subsetter;
+};
+
+static inline bool _write_cff1 (const cff_subset_plan &plan,
+ const OT::cff1::accelerator_subset_t &acc,
+ const hb_vector_t<hb_codepoint_t>& glyphs,
+ unsigned int dest_sz,
+ void *dest)
+{
+ hb_serialize_context_t c (dest, dest_sz);
+
+ char RETURN_OP[1] = { OpCode_return };
+ const ByteStr NULL_SUBR (RETURN_OP, 1);
+
+ OT::cff1 *cff = c.start_serialize<OT::cff1> ();
+ if (unlikely (!c.extend_min (*cff)))
+ return false;
+
+ /* header */
+ cff->version.major.set (0x01);
+ cff->version.minor.set (0x00);
+ cff->nameIndex.set (cff->min_size);
+ cff->offSize.set (4); /* unused? */
+
+ /* name INDEX */
+ {
+ assert (cff->nameIndex == c.head - c.start);
+ CFF1NameIndex *dest = c.start_embed<CFF1NameIndex> ();
+ if (unlikely (dest == nullptr)) return false;
+ if (unlikely (!dest->serialize (&c, *acc.nameIndex)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize CFF name INDEX");
+ return false;
+ }
+ }
+
+ /* top dict INDEX */
+ {
+ assert (plan.offsets.topDictInfo.offset == c.head - c.start);
+ CFF1IndexOf<TopDict> *dest = c.start_embed< CFF1IndexOf<TopDict> > ();
+ if (dest == nullptr) return false;
+ CFF1TopDict_OpSerializer topSzr;
+ TopDictModifiers modifier (plan.offsets, plan.topDictModSIDs);
+ if (unlikely (!dest->serialize (&c, plan.offsets.topDictInfo.offSize,
+ &plan.topdict_mod, 1,
+ plan.topdict_sizes, topSzr, modifier)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize CFF top dict");
+ return false;
+ }
+ }
+
+ /* String INDEX */
+ {
+ assert (plan.offsets.stringIndexInfo.offset == c.head - c.start);
+ CFF1StringIndex *dest = c.start_embed<CFF1StringIndex> ();
+ if (unlikely (dest == nullptr)) return false;
+ if (unlikely (!dest->serialize (&c, *acc.stringIndex, plan.offsets.stringIndexInfo.offSize, plan.sidmap)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize CFF string INDEX");
+ return false;
+ }
+ }
+
+ /* global subrs */
+ {
+ assert (plan.offsets.globalSubrsInfo.offset != 0);
+ assert (plan.offsets.globalSubrsInfo.offset == c.head - c.start);
+
+ CFF1Subrs *dest = c.start_embed <CFF1Subrs> ();
+ if (unlikely (dest == nullptr)) return false;
+ if (unlikely (!dest->serialize (&c, plan.offsets.globalSubrsInfo.offSize, plan.subset_globalsubrs)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize global subroutines");
+ return false;
+ }
+ }
+
+ /* Encoding */
+ if (plan.subset_encoding)
+ {
+ assert (plan.offsets.encodingOffset == c.head - c.start);
+ Encoding *dest = c.start_embed<Encoding> ();
+ if (unlikely (dest == nullptr)) return false;
+ if (unlikely (!dest->serialize (&c,
+ plan.subset_enc_format,
+ plan.subset_enc_num_codes,
+ plan.subset_enc_code_ranges,
+ plan.subset_enc_supp_codes)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize Encoding");
+ return false;
+ }
+ }
+
+ /* Charset */
+ if (plan.subset_charset)
+ {
+ assert (plan.offsets.charsetInfo.offset == c.head - c.start);
+ Charset *dest = c.start_embed<Charset> ();
+ if (unlikely (dest == nullptr)) return false;
+ if (unlikely (!dest->serialize (&c,
+ plan.subset_charset_format,
+ plan.num_glyphs,
+ plan.subset_charset_ranges)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize Charset");
+ return false;
+ }
+ }
+
+ /* FDSelect */
+ if (acc.fdSelect != &Null(CFF1FDSelect))
+ {
+ assert (plan.offsets.FDSelectInfo.offset == c.head - c.start);
+
+ if (unlikely (!hb_serialize_cff_fdselect (&c, glyphs.len, *acc.fdSelect, acc.fdCount,
+ plan.subset_fdselect_format, plan.offsets.FDSelectInfo.size,
+ plan.subset_fdselect_ranges)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize CFF subset FDSelect");
+ return false;
+ }
+ }
+
+ /* FDArray (FD Index) */
+ if (acc.fdArray != &Null(CFF1FDArray))
+ {
+ assert (plan.offsets.FDArrayInfo.offset == c.head - c.start);
+ CFF1FDArray *fda = c.start_embed<CFF1FDArray> ();
+ if (unlikely (fda == nullptr)) return false;
+ CFF1FontDict_OpSerializer fontSzr;
+ if (unlikely (!fda->serialize (&c, plan.offsets.FDArrayInfo.offSize,
+ plan.fontdicts_mod,
+ fontSzr)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize CFF FDArray");
+ return false;
+ }
+ }
+
+ /* CharStrings */
+ {
+ assert (plan.offsets.charStringsInfo.offset == c.head - c.start);
+ CFF1CharStrings *cs = c.start_embed<CFF1CharStrings> ();
+ if (unlikely (cs == nullptr)) return false;
+ if (unlikely (!cs->serialize (&c, plan.offsets.charStringsInfo.offSize, plan.subset_charstrings)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize CFF CharStrings");
+ return false;
+ }
+ }
+
+ /* private dicts & local subrs */
+ assert (plan.offsets.privateDictInfo.offset == c.head - c.start);
+ for (unsigned int i = 0; i < acc.privateDicts.len; i++)
+ {
+ if (plan.fdmap.includes (i))
+ {
+ PrivateDict *pd = c.start_embed<PrivateDict> ();
+ if (unlikely (pd == nullptr)) return false;
+ unsigned int priv_size = plan.fontdicts_mod[plan.fdmap[i]].privateDictInfo.size;
+ bool result;
+ CFFPrivateDict_OpSerializer privSzr (plan.desubroutinize, plan.drop_hints);
+ /* N.B. local subrs immediately follows its corresponding private dict. i.e., subr offset == private dict size */
+ unsigned int subroffset = (plan.offsets.localSubrsInfos[i].size > 0)? priv_size: 0;
+ result = pd->serialize (&c, acc.privateDicts[i], privSzr, subroffset);
+ if (unlikely (!result))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize CFF Private Dict[%d]", i);
+ return false;
+ }
+ if (plan.offsets.localSubrsInfos[i].size > 0)
+ {
+ CFF1Subrs *dest = c.start_embed <CFF1Subrs> ();
+ if (unlikely (dest == nullptr)) return false;
+ if (unlikely (!dest->serialize (&c, plan.offsets.localSubrsInfos[i].offSize, plan.subset_localsubrs[i])))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize local subroutines");
+ return false;
+ }
+ }
+ }
+ }
+
+ assert (c.head == c.end);
+ c.end_serialize ();
+
+ return true;
+}
+
+static bool
+_hb_subset_cff1 (const OT::cff1::accelerator_subset_t &acc,
+ const char *data,
+ hb_subset_plan_t *plan,
+ hb_blob_t **prime /* OUT */)
+{
+ cff_subset_plan cff_plan;
+
+ if (unlikely (!cff_plan.create (acc, plan)))
+ {
+ DEBUG_MSG(SUBSET, nullptr, "Failed to generate a cff subsetting plan.");
+ return false;
+ }
+
+ unsigned int cff_prime_size = cff_plan.get_final_size ();
+ char *cff_prime_data = (char *) calloc (1, cff_prime_size);
+
+ if (unlikely (!_write_cff1 (cff_plan, acc, plan->glyphs,
+ cff_prime_size, cff_prime_data))) {
+ DEBUG_MSG(SUBSET, nullptr, "Failed to write a subset cff.");
+ free (cff_prime_data);
+ return false;
+ }
+
+ *prime = hb_blob_create (cff_prime_data,
+ cff_prime_size,
+ HB_MEMORY_MODE_READONLY,
+ cff_prime_data,
+ free);
+ return true;
+}
+
+/**
+ * hb_subset_cff1:
+ * Subsets the CFF table according to a provided plan.
+ *
+ * Return value: subsetted cff table.
+ **/
+bool
+hb_subset_cff1 (hb_subset_plan_t *plan,
+ hb_blob_t **prime /* OUT */)
+{
+ hb_blob_t *cff_blob = hb_sanitize_context_t().reference_table<CFF::cff1> (plan->source);
+ const char *data = hb_blob_get_data(cff_blob, nullptr);
+
+ OT::cff1::accelerator_subset_t acc;
+ acc.init(plan->source);
+ bool result = likely (acc.is_valid ()) &&
+ _hb_subset_cff1 (acc, data, plan, prime);
+ hb_blob_destroy (cff_blob);
+ acc.fini ();
+
+ return result;
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff1.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff1.hh
new file mode 100644
index 00000000000..1ec8678845a
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff1.hh
@@ -0,0 +1,38 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+
+#ifndef HB_SUBSET_CFF1_HH
+#define HB_SUBSET_CFF1_HH
+
+#include "hb.hh"
+
+#include "hb-subset-plan.hh"
+
+HB_INTERNAL bool
+hb_subset_cff1 (hb_subset_plan_t *plan,
+ hb_blob_t **cff_prime /* OUT */);
+
+#endif /* HB_SUBSET_CFF1_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff2.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff2.cc
new file mode 100644
index 00000000000..5a5f29d3569
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff2.cc
@@ -0,0 +1,624 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+
+#include "hb-open-type.hh"
+#include "hb-ot-cff2-table.hh"
+#include "hb-set.h"
+#include "hb-subset-cff2.hh"
+#include "hb-subset-plan.hh"
+#include "hb-subset-cff-common.hh"
+#include "hb-cff2-interp-cs.hh"
+
+using namespace CFF;
+
+struct CFF2SubTableOffsets : CFFSubTableOffsets
+{
+ CFF2SubTableOffsets ()
+ : CFFSubTableOffsets (),
+ varStoreOffset (0)
+ {}
+
+ unsigned int varStoreOffset;
+};
+
+struct CFF2TopDict_OpSerializer : CFFTopDict_OpSerializer<>
+{
+ bool serialize (hb_serialize_context_t *c,
+ const OpStr &opstr,
+ const CFF2SubTableOffsets &offsets) const
+ {
+ TRACE_SERIALIZE (this);
+
+ switch (opstr.op)
+ {
+ case OpCode_vstore:
+ return_trace (FontDict::serialize_offset4_op(c, opstr.op, offsets.varStoreOffset));
+
+ default:
+ return_trace (CFFTopDict_OpSerializer<>::serialize (c, opstr, offsets));
+ }
+ }
+
+ unsigned int calculate_serialized_size (const OpStr &opstr) const
+ {
+ switch (opstr.op)
+ {
+ case OpCode_vstore:
+ return OpCode_Size (OpCode_longintdict) + 4 + OpCode_Size (opstr.op);
+
+ default:
+ return CFFTopDict_OpSerializer<>::calculate_serialized_size (opstr);
+ }
+ }
+};
+
+struct CFF2CSOpSet_Flatten : CFF2CSOpSet<CFF2CSOpSet_Flatten, FlattenParam>
+{
+ static void flush_args_and_op (OpCode op, CFF2CSInterpEnv &env, FlattenParam& param)
+ {
+ switch (op)
+ {
+ case OpCode_return:
+ case OpCode_endchar:
+ /* dummy opcodes in CFF2. ignore */
+ break;
+
+ case OpCode_hstem:
+ case OpCode_hstemhm:
+ case OpCode_vstem:
+ case OpCode_vstemhm:
+ case OpCode_hintmask:
+ case OpCode_cntrmask:
+ if (param.drop_hints)
+ {
+ env.clear_args ();
+ return;
+ }
+ HB_FALLTHROUGH;
+
+ default:
+ SUPER::flush_args_and_op (op, env, param);
+ break;
+ }
+ }
+
+ static void flush_args (CFF2CSInterpEnv &env, FlattenParam& param)
+ {
+ for (unsigned int i = 0; i < env.argStack.get_count ();)
+ {
+ const BlendArg &arg = env.argStack[i];
+ if (arg.blending ())
+ {
+ if (unlikely (!((arg.numValues > 0) && (env.argStack.get_count () >= arg.numValues))))
+ {
+ env.set_error ();
+ return;
+ }
+ flatten_blends (arg, i, env, param);
+ i += arg.numValues;
+ }
+ else
+ {
+ StrEncoder encoder (param.flatStr);
+ encoder.encode_num (arg);
+ i++;
+ }
+ }
+ SUPER::flush_args (env, param);
+ }
+
+ static void flatten_blends (const BlendArg &arg, unsigned int i, CFF2CSInterpEnv &env, FlattenParam& param)
+ {
+ /* flatten the default values */
+ StrEncoder encoder (param.flatStr);
+ for (unsigned int j = 0; j < arg.numValues; j++)
+ {
+ const BlendArg &arg1 = env.argStack[i + j];
+ if (unlikely (!((arg1.blending () && (arg.numValues == arg1.numValues) && (arg1.valueIndex == j) &&
+ (arg1.deltas.len == env.get_region_count ())))))
+ {
+ env.set_error ();
+ return;
+ }
+ encoder.encode_num (arg1);
+ }
+ /* flatten deltas for each value */
+ for (unsigned int j = 0; j < arg.numValues; j++)
+ {
+ const BlendArg &arg1 = env.argStack[i + j];
+ for (unsigned int k = 0; k < arg1.deltas.len; k++)
+ encoder.encode_num (arg1.deltas[k]);
+ }
+ /* flatten the number of values followed by blend operator */
+ encoder.encode_int (arg.numValues);
+ encoder.encode_op (OpCode_blendcs);
+ }
+
+ static void flush_op (OpCode op, CFF2CSInterpEnv &env, FlattenParam& param)
+ {
+ switch (op)
+ {
+ case OpCode_return:
+ case OpCode_endchar:
+ return;
+ default:
+ StrEncoder encoder (param.flatStr);
+ encoder.encode_op (op);
+ }
+ }
+
+ private:
+ typedef CFF2CSOpSet<CFF2CSOpSet_Flatten, FlattenParam> SUPER;
+ typedef CSOpSet<BlendArg, CFF2CSOpSet_Flatten, CFF2CSOpSet_Flatten, CFF2CSInterpEnv, FlattenParam> CSOPSET;
+};
+
+struct CFF2CSOpSet_SubrSubset : CFF2CSOpSet<CFF2CSOpSet_SubrSubset, SubrSubsetParam>
+{
+ static void process_op (OpCode op, CFF2CSInterpEnv &env, SubrSubsetParam& param)
+ {
+ switch (op) {
+
+ case OpCode_return:
+ param.current_parsed_str->set_parsed ();
+ env.returnFromSubr ();
+ param.set_current_str (env, false);
+ break;
+
+ case OpCode_endchar:
+ param.current_parsed_str->set_parsed ();
+ SUPER::process_op (op, env, param);
+ break;
+
+ case OpCode_callsubr:
+ process_call_subr (op, CSType_LocalSubr, env, param, env.localSubrs, param.local_closure);
+ break;
+
+ case OpCode_callgsubr:
+ process_call_subr (op, CSType_GlobalSubr, env, param, env.globalSubrs, param.global_closure);
+ break;
+
+ default:
+ SUPER::process_op (op, env, param);
+ param.current_parsed_str->add_op (op, env.substr);
+ break;
+ }
+ }
+
+ protected:
+ static void process_call_subr (OpCode op, CSType type,
+ CFF2CSInterpEnv &env, SubrSubsetParam& param,
+ CFF2BiasedSubrs& subrs, hb_set_t *closure)
+ {
+ SubByteStr substr = env.substr;
+ env.callSubr (subrs, type);
+ param.current_parsed_str->add_call_op (op, substr, env.context.subr_num);
+ hb_set_add (closure, env.context.subr_num);
+ param.set_current_str (env, true);
+ }
+
+ private:
+ typedef CFF2CSOpSet<CFF2CSOpSet_SubrSubset, SubrSubsetParam> SUPER;
+};
+
+struct CFF2SubrSubsetter : SubrSubsetter<CFF2SubrSubsetter, CFF2Subrs, const OT::cff2::accelerator_subset_t, CFF2CSInterpEnv, CFF2CSOpSet_SubrSubset>
+{
+ static void finalize_parsed_str (CFF2CSInterpEnv &env, SubrSubsetParam& param, ParsedCStr &charstring)
+ {
+ /* vsindex is inserted at the beginning of the charstring as necessary */
+ if (env.seen_vsindex ())
+ {
+ Number ivs;
+ ivs.set_int ((int)env.get_ivs ());
+ charstring.set_prefix (ivs, OpCode_vsindexcs);
+ }
+ }
+};
+
+struct cff2_subset_plan {
+ cff2_subset_plan ()
+ : final_size (0),
+ orig_fdcount (0),
+ subset_fdcount(1),
+ subset_fdselect_format (0),
+ drop_hints (false),
+ desubroutinize (false)
+ {
+ subset_fdselect_ranges.init ();
+ fdmap.init ();
+ subset_charstrings.init ();
+ subset_globalsubrs.init ();
+ subset_localsubrs.init ();
+ privateDictInfos.init ();
+ }
+
+ ~cff2_subset_plan ()
+ {
+ subset_fdselect_ranges.fini ();
+ fdmap.fini ();
+ subset_charstrings.fini_deep ();
+ subset_globalsubrs.fini_deep ();
+ subset_localsubrs.fini_deep ();
+ privateDictInfos.fini ();
+ }
+
+ bool create (const OT::cff2::accelerator_subset_t &acc,
+ hb_subset_plan_t *plan)
+ {
+ final_size = 0;
+ orig_fdcount = acc.fdArray->count;
+
+ drop_hints = plan->drop_hints;
+ desubroutinize = plan->desubroutinize;
+
+ /* CFF2 header */
+ final_size += OT::cff2::static_size;
+
+ /* top dict */
+ {
+ CFF2TopDict_OpSerializer topSzr;
+ offsets.topDictInfo.size = TopDict::calculate_serialized_size (acc.topDict, topSzr);
+ final_size += offsets.topDictInfo.size;
+ }
+
+ if (desubroutinize)
+ {
+ /* Flatten global & local subrs */
+ SubrFlattener<const OT::cff2::accelerator_subset_t, CFF2CSInterpEnv, CFF2CSOpSet_Flatten>
+ flattener(acc, plan->glyphs, plan->drop_hints);
+ if (!flattener.flatten (subset_charstrings))
+ return false;
+
+ /* no global/local subroutines */
+ offsets.globalSubrsInfo.size = CFF2Subrs::calculate_serialized_size (1, 0, 0);
+ }
+ else
+ {
+ /* Subset subrs: collect used subroutines, leaving all unused ones behind */
+ if (!subr_subsetter.subset (acc, plan->glyphs, plan->drop_hints))
+ return false;
+
+ /* encode charstrings, global subrs, local subrs with new subroutine numbers */
+ if (!subr_subsetter.encode_charstrings (acc, plan->glyphs, subset_charstrings))
+ return false;
+
+ if (!subr_subsetter.encode_globalsubrs (subset_globalsubrs))
+ return false;
+
+ /* global subrs */
+ unsigned int dataSize = subset_globalsubrs.total_size ();
+ offsets.globalSubrsInfo.offSize = calcOffSize (dataSize);
+ offsets.globalSubrsInfo.size = CFF2Subrs::calculate_serialized_size (offsets.globalSubrsInfo.offSize, subset_globalsubrs.len, dataSize);
+
+ /* local subrs */
+ if (!offsets.localSubrsInfos.resize (orig_fdcount))
+ return false;
+ if (!subset_localsubrs.resize (orig_fdcount))
+ return false;
+ for (unsigned int fd = 0; fd < orig_fdcount; fd++)
+ {
+ subset_localsubrs[fd].init ();
+ offsets.localSubrsInfos[fd].init ();
+ if (fdmap.includes (fd))
+ {
+ if (!subr_subsetter.encode_localsubrs (fd, subset_localsubrs[fd]))
+ return false;
+
+ unsigned int dataSize = subset_localsubrs[fd].total_size ();
+ if (dataSize > 0)
+ {
+ offsets.localSubrsInfos[fd].offset = final_size;
+ offsets.localSubrsInfos[fd].offSize = calcOffSize (dataSize);
+ offsets.localSubrsInfos[fd].size = CFF2Subrs::calculate_serialized_size (offsets.localSubrsInfos[fd].offSize, subset_localsubrs[fd].len, dataSize);
+ }
+ }
+ }
+ }
+
+ /* global subrs */
+ offsets.globalSubrsInfo.offset = final_size;
+ final_size += offsets.globalSubrsInfo.size;
+
+ /* variation store */
+ if (acc.varStore != &Null(CFF2VariationStore))
+ {
+ offsets.varStoreOffset = final_size;
+ final_size += acc.varStore->get_size ();
+ }
+
+ /* FDSelect */
+ if (acc.fdSelect != &Null(CFF2FDSelect))
+ {
+ offsets.FDSelectInfo.offset = final_size;
+ if (unlikely (!hb_plan_subset_cff_fdselect (plan->glyphs,
+ orig_fdcount,
+ *(const FDSelect *)acc.fdSelect,
+ subset_fdcount,
+ offsets.FDSelectInfo.size,
+ subset_fdselect_format,
+ subset_fdselect_ranges,
+ fdmap)))
+ return false;
+
+ final_size += offsets.FDSelectInfo.size;
+ }
+ else
+ fdmap.identity (1);
+
+ /* FDArray (FDIndex) */
+ {
+ offsets.FDArrayInfo.offset = final_size;
+ CFFFontDict_OpSerializer fontSzr;
+ unsigned int dictsSize = 0;
+ for (unsigned int i = 0; i < acc.fontDicts.len; i++)
+ if (fdmap.includes (i))
+ dictsSize += FontDict::calculate_serialized_size (acc.fontDicts[i], fontSzr);
+
+ offsets.FDArrayInfo.offSize = calcOffSize (dictsSize);
+ final_size += CFF2Index::calculate_serialized_size (offsets.FDArrayInfo.offSize, subset_fdcount, dictsSize);
+ }
+
+ /* CharStrings */
+ {
+ offsets.charStringsInfo.offset = final_size;
+ unsigned int dataSize = subset_charstrings.total_size ();
+ offsets.charStringsInfo.offSize = calcOffSize (dataSize);
+ final_size += CFF2CharStrings::calculate_serialized_size (offsets.charStringsInfo.offSize, plan->glyphs.len, dataSize);
+ }
+
+ /* private dicts & local subrs */
+ offsets.privateDictsOffset = final_size;
+ for (unsigned int i = 0; i < orig_fdcount; i++)
+ {
+ if (fdmap.includes (i))
+ {
+ bool has_localsubrs = offsets.localSubrsInfos[i].size > 0;
+ CFFPrivateDict_OpSerializer privSzr (desubroutinize, drop_hints);
+ unsigned int priv_size = PrivateDict::calculate_serialized_size (acc.privateDicts[i], privSzr, has_localsubrs);
+ TableInfo privInfo = { final_size, priv_size, 0 };
+ privateDictInfos.push (privInfo);
+ final_size += privInfo.size;
+
+ if (!plan->desubroutinize && has_localsubrs)
+ {
+ offsets.localSubrsInfos[i].offset = final_size;
+ final_size += offsets.localSubrsInfos[i].size;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ unsigned int get_final_size () const { return final_size; }
+
+ unsigned int final_size;
+ CFF2SubTableOffsets offsets;
+
+ unsigned int orig_fdcount;
+ unsigned int subset_fdcount;
+ unsigned int subset_fdselect_format;
+ hb_vector_t<code_pair> subset_fdselect_ranges;
+
+ Remap fdmap;
+
+ StrBuffArray subset_charstrings;
+ StrBuffArray subset_globalsubrs;
+ hb_vector_t<StrBuffArray> subset_localsubrs;
+ hb_vector_t<TableInfo> privateDictInfos;
+
+ bool drop_hints;
+ bool desubroutinize;
+ CFF2SubrSubsetter subr_subsetter;
+};
+
+static inline bool _write_cff2 (const cff2_subset_plan &plan,
+ const OT::cff2::accelerator_subset_t &acc,
+ const hb_vector_t<hb_codepoint_t>& glyphs,
+ unsigned int dest_sz,
+ void *dest)
+{
+ hb_serialize_context_t c (dest, dest_sz);
+
+ OT::cff2 *cff2 = c.start_serialize<OT::cff2> ();
+ if (unlikely (!c.extend_min (*cff2)))
+ return false;
+
+ /* header */
+ cff2->version.major.set (0x02);
+ cff2->version.minor.set (0x00);
+ cff2->topDict.set (OT::cff2::static_size);
+
+ /* top dict */
+ {
+ assert (cff2->topDict == c.head - c.start);
+ cff2->topDictSize.set (plan.offsets.topDictInfo.size);
+ TopDict &dict = cff2 + cff2->topDict;
+ CFF2TopDict_OpSerializer topSzr;
+ if (unlikely (!dict.serialize (&c, acc.topDict, topSzr, plan.offsets)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize CFF2 top dict");
+ return false;
+ }
+ }
+
+ /* global subrs */
+ {
+ assert (cff2->topDict + plan.offsets.topDictInfo.size == c.head - c.start);
+ CFF2Subrs *dest = c.start_embed <CFF2Subrs> ();
+ if (unlikely (dest == nullptr)) return false;
+ if (unlikely (!dest->serialize (&c, plan.offsets.globalSubrsInfo.offSize, plan.subset_globalsubrs)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize global subroutines");
+ return false;
+ }
+ }
+
+ /* variation store */
+ if (acc.varStore != &Null(CFF2VariationStore))
+ {
+ assert (plan.offsets.varStoreOffset == c.head - c.start);
+ CFF2VariationStore *dest = c.start_embed<CFF2VariationStore> ();
+ if (unlikely (!dest->serialize (&c, acc.varStore)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize CFF2 Variation Store");
+ return false;
+ }
+ }
+
+ /* FDSelect */
+ if (acc.fdSelect != &Null(CFF2FDSelect))
+ {
+ assert (plan.offsets.FDSelectInfo.offset == c.head - c.start);
+
+ if (unlikely (!hb_serialize_cff_fdselect (&c, glyphs.len, *(const FDSelect *)acc.fdSelect, acc.fdArray->count,
+ plan.subset_fdselect_format, plan.offsets.FDSelectInfo.size,
+ plan.subset_fdselect_ranges)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize CFF2 subset FDSelect");
+ return false;
+ }
+ }
+
+ /* FDArray (FD Index) */
+ {
+ assert (plan.offsets.FDArrayInfo.offset == c.head - c.start);
+ CFF2FDArray *fda = c.start_embed<CFF2FDArray> ();
+ if (unlikely (fda == nullptr)) return false;
+ CFFFontDict_OpSerializer fontSzr;
+ if (unlikely (!fda->serialize (&c, plan.offsets.FDArrayInfo.offSize,
+ acc.fontDicts, plan.subset_fdcount, plan.fdmap,
+ fontSzr, plan.privateDictInfos)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize CFF2 FDArray");
+ return false;
+ }
+ }
+
+ /* CharStrings */
+ {
+ assert (plan.offsets.charStringsInfo.offset == c.head - c.start);
+ CFF2CharStrings *cs = c.start_embed<CFF2CharStrings> ();
+ if (unlikely (cs == nullptr)) return false;
+ if (unlikely (!cs->serialize (&c, plan.offsets.charStringsInfo.offSize, plan.subset_charstrings)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize CFF2 CharStrings");
+ return false;
+ }
+ }
+
+ /* private dicts & local subrs */
+ assert (plan.offsets.privateDictsOffset == c.head - c.start);
+ for (unsigned int i = 0; i < acc.privateDicts.len; i++)
+ {
+ if (plan.fdmap.includes (i))
+ {
+ PrivateDict *pd = c.start_embed<PrivateDict> ();
+ if (unlikely (pd == nullptr)) return false;
+ unsigned int priv_size = plan.privateDictInfos[plan.fdmap[i]].size;
+ bool result;
+ CFFPrivateDict_OpSerializer privSzr (plan.desubroutinize, plan.drop_hints);
+ /* N.B. local subrs immediately follows its corresponding private dict. i.e., subr offset == private dict size */
+ unsigned int subroffset = (plan.offsets.localSubrsInfos[i].size > 0)? priv_size: 0;
+ result = pd->serialize (&c, acc.privateDicts[i], privSzr, subroffset);
+ if (unlikely (!result))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize CFF Private Dict[%d]", i);
+ return false;
+ }
+ if (plan.offsets.localSubrsInfos[i].size > 0)
+ {
+ CFF2Subrs *dest = c.start_embed <CFF2Subrs> ();
+ if (unlikely (dest == nullptr)) return false;
+ if (unlikely (!dest->serialize (&c, plan.offsets.localSubrsInfos[i].offSize, plan.subset_localsubrs[i])))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "failed to serialize local subroutines");
+ return false;
+ }
+ }
+ }
+ }
+
+ assert (c.head == c.end);
+ c.end_serialize ();
+
+ return true;
+}
+
+static bool
+_hb_subset_cff2 (const OT::cff2::accelerator_subset_t &acc,
+ const char *data,
+ hb_subset_plan_t *plan,
+ hb_blob_t **prime /* OUT */)
+{
+ cff2_subset_plan cff2_plan;
+
+ if (unlikely (!cff2_plan.create (acc, plan)))
+ {
+ DEBUG_MSG(SUBSET, nullptr, "Failed to generate a cff2 subsetting plan.");
+ return false;
+ }
+
+ unsigned int cff2_prime_size = cff2_plan.get_final_size ();
+ char *cff2_prime_data = (char *) calloc (1, cff2_prime_size);
+
+ if (unlikely (!_write_cff2 (cff2_plan, acc, plan->glyphs,
+ cff2_prime_size, cff2_prime_data))) {
+ DEBUG_MSG(SUBSET, nullptr, "Failed to write a subset cff2.");
+ free (cff2_prime_data);
+ return false;
+ }
+
+ *prime = hb_blob_create (cff2_prime_data,
+ cff2_prime_size,
+ HB_MEMORY_MODE_READONLY,
+ cff2_prime_data,
+ free);
+ return true;
+}
+
+/**
+ * hb_subset_cff2:
+ * Subsets the CFF2 table according to a provided plan.
+ *
+ * Return value: subsetted cff2 table.
+ **/
+bool
+hb_subset_cff2 (hb_subset_plan_t *plan,
+ hb_blob_t **prime /* OUT */)
+{
+ hb_blob_t *cff2_blob = hb_sanitize_context_t().reference_table<CFF::cff2> (plan->source);
+ const char *data = hb_blob_get_data(cff2_blob, nullptr);
+
+ OT::cff2::accelerator_subset_t acc;
+ acc.init(plan->source);
+ bool result = likely (acc.is_valid ()) &&
+ _hb_subset_cff2 (acc, data, plan, prime);
+
+ hb_blob_destroy (cff2_blob);
+ acc.fini ();
+
+ return result;
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff2.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff2.hh
new file mode 100644
index 00000000000..a07dc290e5c
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff2.hh
@@ -0,0 +1,38 @@
+/*
+ * Copyright © 2018 Adobe 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.
+ *
+ * Adobe Author(s): Michiharu Ariza
+ */
+
+#ifndef HB_SUBSET_CFF2_HH
+#define HB_SUBSET_CFF2_HH
+
+#include "hb.hh"
+
+#include "hb-subset-plan.hh"
+
+HB_INTERNAL bool
+hb_subset_cff2 (hb_subset_plan_t *plan,
+ hb_blob_t **cff2_prime /* OUT */);
+
+#endif /* HB_SUBSET_CFF2_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
index aafd31b9d3f..f718a566b19 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.cc
@@ -35,7 +35,7 @@
* Since: 1.8.0
**/
hb_subset_input_t *
-hb_subset_input_create_or_fail (void)
+hb_subset_input_create_or_fail ()
{
hb_subset_input_t *input = hb_object_create<hb_subset_input_t>();
@@ -131,3 +131,16 @@ hb_subset_input_get_drop_layout (hb_subset_input_t *subset_input)
{
return subset_input->drop_layout;
}
+
+HB_EXTERN void
+hb_subset_input_set_desubroutinize (hb_subset_input_t *subset_input,
+ hb_bool_t desubroutinize)
+{
+ subset_input->desubroutinize = desubroutinize;
+}
+
+HB_EXTERN hb_bool_t
+hb_subset_input_get_desubroutinize (hb_subset_input_t *subset_input)
+{
+ return subset_input->desubroutinize;
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.hh
index 7f625f2e443..8dad94f584e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.hh
@@ -43,6 +43,7 @@ struct hb_subset_input_t
bool drop_hints : 1;
bool drop_layout : 1;
+ bool desubroutinize : 1;
/* TODO
*
* features
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
index 56a2bba522d..5c0983b7160 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc
@@ -30,6 +30,7 @@
#include "hb-ot-cmap-table.hh"
#include "hb-ot-glyf-table.hh"
+#include "hb-ot-cff1-table.hh"
static void
_add_gid_and_children (const OT::glyf::accelerator_t &glyf,
@@ -53,6 +54,19 @@ _add_gid_and_children (const OT::glyf::accelerator_t &glyf,
}
static void
+_add_cff_seac_components (const OT::cff1::accelerator_t &cff,
+ hb_codepoint_t gid,
+ hb_set_t *gids_to_retain)
+{
+ hb_codepoint_t base_gid, accent_gid;
+ if (cff.get_seac_components (gid, &base_gid, &accent_gid))
+ {
+ hb_set_add (gids_to_retain, base_gid);
+ hb_set_add (gids_to_retain, accent_gid);
+ }
+}
+
+static void
_gsub_closure (hb_face_t *face, hb_set_t *gids_to_retain)
{
hb_set_t lookup_indices;
@@ -89,8 +103,10 @@ _populate_gids_to_retain (hb_face_t *face,
{
OT::cmap::accelerator_t cmap;
OT::glyf::accelerator_t glyf;
+ OT::cff1::accelerator_t cff;
cmap.init (face);
glyf.init (face);
+ cff.init (face);
hb_set_t *initial_gids_to_retain = hb_set_create ();
initial_gids_to_retain->add (0); // Not-def
@@ -120,6 +136,8 @@ _populate_gids_to_retain (hb_face_t *face,
while (initial_gids_to_retain->next (&gid))
{
_add_gid_and_children (glyf, gid, all_gids_to_retain);
+ if (cff.is_valid ())
+ _add_cff_seac_components (cff, gid, all_gids_to_retain);
}
hb_set_destroy (initial_gids_to_retain);
@@ -130,6 +148,7 @@ _populate_gids_to_retain (hb_face_t *face,
while (all_gids_to_retain->next (&gid))
glyphs->push (gid);
+ cff.fini ();
glyf.fini ();
cmap.fini ();
@@ -163,6 +182,7 @@ hb_subset_plan_create (hb_face_t *face,
plan->drop_hints = input->drop_hints;
plan->drop_layout = input->drop_layout;
+ plan->desubroutinize = input->desubroutinize;
plan->unicodes = hb_set_create();
plan->glyphs.init();
plan->source = hb_face_reference (face);
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
index c574f8f810b..a710a4dc040 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.hh
@@ -40,6 +40,7 @@ struct hb_subset_plan_t
bool drop_hints : 1;
bool drop_layout : 1;
+ bool desubroutinize : 1;
// For each cp that we'd like to retain maps to the corresponding gid.
hb_set_t *unicodes;
@@ -54,9 +55,8 @@ struct hb_subset_plan_t
hb_face_t *source;
hb_face_t *dest;
- inline bool
- new_gid_for_codepoint (hb_codepoint_t codepoint,
- hb_codepoint_t *new_gid) const
+ bool new_gid_for_codepoint (hb_codepoint_t codepoint,
+ hb_codepoint_t *new_gid) const
{
hb_codepoint_t old_gid = codepoint_to_glyph->get (codepoint);
if (old_gid == HB_MAP_VALUE_INVALID)
@@ -65,9 +65,8 @@ struct hb_subset_plan_t
return new_gid_for_old_gid (old_gid, new_gid);
}
- inline bool
- new_gid_for_old_gid (hb_codepoint_t old_gid,
- hb_codepoint_t *new_gid) const
+ bool new_gid_for_old_gid (hb_codepoint_t old_gid,
+ hb_codepoint_t *new_gid) const
{
hb_codepoint_t gid = glyph_map->get (old_gid);
if (gid == HB_MAP_VALUE_INVALID)
@@ -77,7 +76,7 @@ struct hb_subset_plan_t
return true;
}
- inline bool
+ bool
add_table (hb_tag_t tag,
hb_blob_t *contents)
{
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.cc
index a3917b8626b..37e7cec2e3b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.cc
@@ -40,6 +40,9 @@
#include "hb-ot-maxp-table.hh"
#include "hb-ot-os2-table.hh"
#include "hb-ot-post-table.hh"
+#include "hb-ot-cff1-table.hh"
+#include "hb-ot-cff2-table.hh"
+#include "hb-ot-vorg-table.hh"
#include "hb-ot-layout-gsub-table.hh"
#include "hb-ot-layout-gpos-table.hh"
@@ -77,10 +80,10 @@ _subset2 (hb_subset_plan_t *plan)
return false;
}
retry:
- hb_serialize_context_t serializer (buf, buf_size);
+ hb_serialize_context_t serializer ((void *) buf, buf_size);
hb_subset_context_t c (plan, &serializer);
result = table->subset (&c);
- if (serializer.ran_out_of_room)
+ if (serializer.in_error ())
{
buf_size += (buf_size >> 1) + 32;
DEBUG_MSG(SUBSET, nullptr, "OT::%c%c%c%c ran out of room; reallocating to %u bytes.", HB_UNTAG (tag), buf_size);
@@ -177,7 +180,18 @@ _subset_table (hb_subset_plan_t *plan,
case HB_OT_TAG_post:
result = _subset<const OT::post> (plan);
break;
-
+ case HB_OT_TAG_cff1:
+ result = _subset<const OT::cff1> (plan);
+ break;
+ case HB_OT_TAG_cff2:
+ result = _subset<const OT::cff2> (plan);
+ break;
+ case HB_OT_TAG_VORG:
+ result = _subset<const OT::VORG> (plan);
+ break;
+ case HB_OT_TAG_GDEF:
+ result = _subset2<const OT::GDEF> (plan);
+ break;
case HB_OT_TAG_GSUB:
result = _subset2<const OT::GSUB> (plan);
break;
@@ -210,9 +224,9 @@ _should_drop_table (hb_subset_plan_t *plan, hb_tag_t tag)
case HB_TAG ('V', 'D', 'M', 'X'): /* hint table, fallthrough */
return plan->drop_hints;
// Drop Layout Tables if requested.
- 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_OT_TAG_GDEF:
+ case HB_OT_TAG_GPOS:
+ case HB_OT_TAG_GSUB:
return plan->drop_layout;
// Drop these tables below by default, list pulled
// from fontTools:
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.h
index 3b306dd81f5..f582e46df71 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.h
@@ -66,6 +66,11 @@ hb_subset_input_set_drop_layout (hb_subset_input_t *subset_input,
HB_EXTERN hb_bool_t
hb_subset_input_get_drop_layout (hb_subset_input_t *subset_input);
+HB_EXTERN void
+hb_subset_input_set_desubroutinize (hb_subset_input_t *subset_input,
+ hb_bool_t desubroutinize);
+HB_EXTERN hb_bool_t
+hb_subset_input_get_desubroutinize (hb_subset_input_t *subset_input);
/* hb_subset () */
HB_EXTERN hb_face_t *
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.hh
index e43c79f5ee6..45cb763ecb6 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.hh
@@ -39,11 +39,10 @@
struct hb_subset_context_t :
hb_dispatch_context_t<hb_subset_context_t, bool, HB_DEBUG_SUBSET>
{
- inline const char *get_name (void) { return "SUBSET"; }
+ const char *get_name () { return "SUBSET"; }
template <typename T>
- inline bool dispatch (const T &obj) { return obj.subset (this); }
- static bool default_return_value (void) { return true; }
- bool stop_sublookup_iteration (bool r HB_UNUSED) const { return false; }
+ bool dispatch (const T &obj) { return obj.subset (this); }
+ static bool default_return_value () { return true; }
hb_subset_plan_t *plan;
hb_serialize_context_t *serializer;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc
index 10608aff518..534935f13d2 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc
@@ -223,12 +223,12 @@ hb_ucdn_decompose(hb_unicode_funcs_t *ufuncs HB_UNUSED,
#if HB_USE_ATEXIT
-static void free_static_ucdn_funcs (void);
+static void free_static_ucdn_funcs ();
#endif
static struct hb_ucdn_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_t<hb_ucdn_unicode_funcs_lazy_loader_t>
{
- static inline hb_unicode_funcs_t *create (void)
+ static hb_unicode_funcs_t *create ()
{
hb_unicode_funcs_t *funcs = hb_unicode_funcs_create (nullptr);
@@ -251,7 +251,7 @@ static struct hb_ucdn_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader
#if HB_USE_ATEXIT
static
-void free_static_ucdn_funcs (void)
+void free_static_ucdn_funcs ()
{
static_ucdn_funcs.free_instance ();
}
@@ -259,10 +259,10 @@ void free_static_ucdn_funcs (void)
extern "C" HB_INTERNAL
hb_unicode_funcs_t *
-hb_ucdn_get_unicode_funcs (void);
+hb_ucdn_get_unicode_funcs ();
hb_unicode_funcs_t *
-hb_ucdn_get_unicode_funcs (void)
+hb_ucdn_get_unicode_funcs ()
{
return static_ucdn_funcs.get_unconst ();
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode.cc
index 5accf3643cd..4ac521d38cf 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode.cc
@@ -123,12 +123,12 @@ hb_unicode_decompose_compatibility_nil (hb_unicode_funcs_t *ufuncs HB_UNUSED
}
-extern "C" hb_unicode_funcs_t *hb_glib_get_unicode_funcs (void);
-extern "C" hb_unicode_funcs_t *hb_icu_get_unicode_funcs (void);
-extern "C" hb_unicode_funcs_t *hb_ucdn_get_unicode_funcs (void);
+extern "C" hb_unicode_funcs_t *hb_glib_get_unicode_funcs ();
+extern "C" hb_unicode_funcs_t *hb_icu_get_unicode_funcs ();
+extern "C" hb_unicode_funcs_t *hb_ucdn_get_unicode_funcs ();
hb_unicode_funcs_t *
-hb_unicode_funcs_get_default (void)
+hb_unicode_funcs_get_default ()
{
#if defined(HAVE_UCDN)
return hb_ucdn_get_unicode_funcs ();
@@ -151,7 +151,7 @@ hb_unicode_funcs_get_default (void)
* hb_unicode_funcs_create: (Xconstructor)
* @parent: (nullable):
*
- *
+ *
*
* Return value: (transfer full):
*
@@ -197,14 +197,14 @@ DEFINE_NULL_INSTANCE (hb_unicode_funcs_t) =
/**
* hb_unicode_funcs_get_empty:
*
- *
+ *
*
* Return value: (transfer full):
*
* Since: 0.9.2
**/
hb_unicode_funcs_t *
-hb_unicode_funcs_get_empty (void)
+hb_unicode_funcs_get_empty ()
{
return const_cast<hb_unicode_funcs_t *> (&Null(hb_unicode_funcs_t));
}
@@ -213,7 +213,7 @@ hb_unicode_funcs_get_empty (void)
* hb_unicode_funcs_reference: (skip)
* @ufuncs: Unicode functions.
*
- *
+ *
*
* Return value: (transfer full):
*
@@ -229,7 +229,7 @@ hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs)
* hb_unicode_funcs_destroy: (skip)
* @ufuncs: Unicode functions.
*
- *
+ *
*
* Since: 0.9.2
**/
@@ -251,14 +251,14 @@ hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs)
/**
* hb_unicode_funcs_set_user_data: (skip)
* @ufuncs: Unicode functions.
- * @key:
- * @data:
- * @destroy:
- * @replace:
+ * @key:
+ * @data:
+ * @destroy:
+ * @replace:
+ *
*
- *
*
- * Return value:
+ * Return value:
*
* Since: 0.9.2
**/
@@ -275,9 +275,9 @@ hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs,
/**
* hb_unicode_funcs_get_user_data: (skip)
* @ufuncs: Unicode functions.
- * @key:
+ * @key:
+ *
*
- *
*
* Return value: (transfer none):
*
@@ -295,7 +295,7 @@ hb_unicode_funcs_get_user_data (hb_unicode_funcs_t *ufuncs,
* hb_unicode_funcs_make_immutable:
* @ufuncs: Unicode functions.
*
- *
+ *
*
* Since: 0.9.2
**/
@@ -312,9 +312,9 @@ hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs)
* hb_unicode_funcs_is_immutable:
* @ufuncs: Unicode functions.
*
- *
*
- * Return value:
+ *
+ * Return value:
*
* Since: 0.9.2
**/
@@ -328,9 +328,9 @@ hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs)
* hb_unicode_funcs_get_parent:
* @ufuncs: Unicode functions.
*
- *
*
- * Return value:
+ *
+ * Return value:
*
* Since: 0.9.2
**/
@@ -384,13 +384,13 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
/**
* hb_unicode_compose:
* @ufuncs: Unicode functions.
- * @a:
- * @b:
+ * @a:
+ * @b:
* @ab: (out):
*
- *
*
- * Return value:
+ *
+ * Return value:
*
* Since: 0.9.2
**/
@@ -406,13 +406,13 @@ hb_unicode_compose (hb_unicode_funcs_t *ufuncs,
/**
* hb_unicode_decompose:
* @ufuncs: Unicode functions.
- * @ab:
+ * @ab:
* @a: (out):
* @b: (out):
*
- *
*
- * Return value:
+ *
+ * Return value:
*
* Since: 0.9.2
**/
@@ -428,12 +428,12 @@ hb_unicode_decompose (hb_unicode_funcs_t *ufuncs,
/**
* hb_unicode_decompose_compatibility:
* @ufuncs: Unicode functions.
- * @u:
+ * @u:
* @decomposed: (out):
*
- *
*
- * Return value:
+ *
+ * Return value:
*
* Since: 0.9.2
* Deprecated: 2.0.0
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode.hh
index d3fd5ea4bae..82ebb106472 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode.hh
@@ -67,27 +67,27 @@ struct hb_unicode_funcs_t
hb_unicode_funcs_t *parent;
#define HB_UNICODE_FUNC_IMPLEMENT(return_type, name) \
- inline return_type name (hb_codepoint_t unicode) { return func.name (this, unicode, user_data.name); }
+ return_type name (hb_codepoint_t unicode) { return func.name (this, unicode, user_data.name); }
HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
#undef HB_UNICODE_FUNC_IMPLEMENT
- inline hb_bool_t compose (hb_codepoint_t a, hb_codepoint_t b,
- hb_codepoint_t *ab)
+ hb_bool_t compose (hb_codepoint_t a, hb_codepoint_t b,
+ hb_codepoint_t *ab)
{
*ab = 0;
if (unlikely (!a || !b)) return false;
return func.compose (this, a, b, ab, user_data.compose);
}
- inline hb_bool_t decompose (hb_codepoint_t ab,
- hb_codepoint_t *a, hb_codepoint_t *b)
+ hb_bool_t decompose (hb_codepoint_t ab,
+ hb_codepoint_t *a, hb_codepoint_t *b)
{
*a = ab; *b = 0;
return func.decompose (this, ab, a, b, user_data.decompose);
}
- inline unsigned int decompose_compatibility (hb_codepoint_t u,
- hb_codepoint_t *decomposed)
+ unsigned int decompose_compatibility (hb_codepoint_t u,
+ hb_codepoint_t *decomposed)
{
unsigned int ret = func.decompose_compatibility (this, u, decomposed, user_data.decompose_compatibility);
if (ret == 1 && u == decomposed[0]) {
@@ -98,7 +98,7 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
return ret;
}
- inline unsigned int
+ unsigned int
modified_combining_class (hb_codepoint_t u)
{
/* XXX This hack belongs to the Myanmar shaper. */
@@ -117,14 +117,14 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
return _hb_modified_combining_class[combining_class (u)];
}
- static inline hb_bool_t
+ static hb_bool_t
is_variation_selector (hb_codepoint_t unicode)
{
/* U+180B..180D MONGOLIAN FREE VARIATION SELECTORs are handled in the
* Arabic shaper. No need to match them here. */
return unlikely (hb_in_ranges<hb_codepoint_t> (unicode,
- 0xFE00u, 0xFE0Fu, /* VARIATION SELECTOR-1..16 */
- 0xE0100u, 0xE01EFu)); /* VARIATION SELECTOR-17..256 */
+ 0xFE00u, 0xFE0Fu, /* VARIATION SELECTOR-1..16 */
+ 0xE0100u, 0xE01EFu)); /* VARIATION SELECTOR-17..256 */
}
/* Default_Ignorable codepoints:
@@ -164,7 +164,7 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
* E0100..E01EF # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
* E01F0..E0FFF # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
*/
- static inline hb_bool_t
+ static hb_bool_t
is_default_ignorable (hb_codepoint_t ch)
{
hb_codepoint_t plane = ch >> 16;
@@ -216,7 +216,7 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
SPACE_PUNCTUATION,
SPACE_NARROW,
};
- static inline space_t
+ static space_t
space_fallback_type (hb_codepoint_t u)
{
switch (u)
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 1fae6435b2c..8d0473d95fb 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-uniscribe.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-uniscribe.cc
@@ -205,7 +205,7 @@ struct hb_uniscribe_shaper_funcs_t
SSOT ScriptShapeOpenType;
SPOT ScriptPlaceOpenType;
- inline void init (void)
+ void init ()
{
HMODULE hinstLib;
this->ScriptItemizeOpenType = nullptr;
@@ -232,12 +232,12 @@ struct hb_uniscribe_shaper_funcs_t
};
-static void free_static_uniscribe_shaper_funcs (void);
+static void free_static_uniscribe_shaper_funcs ();
static struct hb_uniscribe_shaper_funcs_lazy_loader_t : hb_lazy_loader_t<hb_uniscribe_shaper_funcs_t,
hb_uniscribe_shaper_funcs_lazy_loader_t>
{
- static inline hb_uniscribe_shaper_funcs_t *create (void)
+ static hb_uniscribe_shaper_funcs_t *create ()
{
hb_uniscribe_shaper_funcs_t *funcs = (hb_uniscribe_shaper_funcs_t *) calloc (1, sizeof (hb_uniscribe_shaper_funcs_t));
if (unlikely (!funcs))
@@ -251,11 +251,11 @@ static struct hb_uniscribe_shaper_funcs_lazy_loader_t : hb_lazy_loader_t<hb_unis
return funcs;
}
- static inline void destroy (hb_uniscribe_shaper_funcs_t *p)
+ static void destroy (hb_uniscribe_shaper_funcs_t *p)
{
free ((void *) p);
}
- static inline hb_uniscribe_shaper_funcs_t *get_null (void)
+ static hb_uniscribe_shaper_funcs_t *get_null ()
{
return nullptr;
}
@@ -263,14 +263,14 @@ static struct hb_uniscribe_shaper_funcs_lazy_loader_t : hb_lazy_loader_t<hb_unis
#if HB_USE_ATEXIT
static
-void free_static_uniscribe_shaper_funcs (void)
+void free_static_uniscribe_shaper_funcs ()
{
static_uniscribe_shaper_funcs.free_instance ();
}
#endif
static hb_uniscribe_shaper_funcs_t *
-hb_uniscribe_shaper_get_funcs (void)
+hb_uniscribe_shaper_get_funcs ()
{
return static_uniscribe_shaper_funcs.get_unconst ();
}
@@ -288,9 +288,8 @@ struct active_feature_t {
a->rec.lParameter < b->rec.lParameter ? -1 : a->rec.lParameter > b->rec.lParameter ? 1 :
0;
}
- bool operator== (const active_feature_t *f) {
- return cmp (this, f) == 0;
- }
+ bool operator== (const active_feature_t *f)
+ { return cmp (this, f) == 0; }
};
struct feature_event_t {
@@ -298,7 +297,8 @@ struct feature_event_t {
bool start;
active_feature_t feature;
- static int cmp (const void *pa, const void *pb) {
+ static int cmp (const void *pa, const void *pb)
+ {
const feature_event_t *a = (const feature_event_t *) pa;
const feature_event_t *b = (const feature_event_t *) pb;
return a->index < b->index ? -1 : a->index > b->index ? 1 :
@@ -695,7 +695,7 @@ _hb_uniscribe_shape (hb_shape_plan_t *shape_plan,
{
active_feature_t *feature = active_features.find (&event->feature);
if (feature)
- active_features.remove (feature - active_features);
+ active_features.remove (feature - active_features.arrayZ ());
}
}
@@ -886,8 +886,8 @@ retry:
&items[i].a,
script_tags[i],
language_tag,
- range_char_counts,
- range_properties,
+ range_char_counts.arrayZ (),
+ range_properties.arrayZ (),
range_properties.len,
pchars + chars_offset,
item_chars_len,
@@ -927,8 +927,8 @@ retry:
&items[i].a,
script_tags[i],
language_tag,
- range_char_counts,
- range_properties,
+ range_char_counts.arrayZ (),
+ range_properties.arrayZ (),
range_properties.len,
pchars + chars_offset,
log_clusters + chars_offset,
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-utf.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-utf.hh
index 54ede3c167a..59ec75ebc1e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-utf.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-utf.hh
@@ -36,7 +36,7 @@ struct hb_utf8_t
{
typedef uint8_t codepoint_t;
- static inline const codepoint_t *
+ static const codepoint_t *
next (const codepoint_t *text,
const codepoint_t *end,
hb_codepoint_t *unicode,
@@ -105,7 +105,7 @@ struct hb_utf8_t
return text;
}
- static inline const codepoint_t *
+ static const codepoint_t *
prev (const codepoint_t *text,
const codepoint_t *start,
hb_codepoint_t *unicode,
@@ -122,13 +122,11 @@ struct hb_utf8_t
return end - 1;
}
- static inline unsigned int
+ static unsigned int
strlen (const codepoint_t *text)
- {
- return ::strlen ((const char *) text);
- }
+ { return ::strlen ((const char *) text); }
- static inline unsigned int
+ static unsigned int
encode_len (hb_codepoint_t unicode)
{
if (unicode < 0x0080u) return 1;
@@ -138,7 +136,7 @@ struct hb_utf8_t
return 3;
}
- static inline codepoint_t *
+ static codepoint_t *
encode (codepoint_t *text,
const codepoint_t *end,
hb_codepoint_t unicode)
@@ -185,7 +183,7 @@ struct hb_utf16_xe_t
static_assert (sizeof (TCodepoint) == 2, "");
typedef TCodepoint codepoint_t;
- static inline const codepoint_t *
+ static const codepoint_t *
next (const codepoint_t *text,
const codepoint_t *end,
hb_codepoint_t *unicode,
@@ -217,7 +215,7 @@ struct hb_utf16_xe_t
return text;
}
- static inline const codepoint_t *
+ static const codepoint_t *
prev (const codepoint_t *text,
const codepoint_t *start,
hb_codepoint_t *unicode,
@@ -250,7 +248,7 @@ struct hb_utf16_xe_t
}
- static inline unsigned int
+ static unsigned int
strlen (const codepoint_t *text)
{
unsigned int l = 0;
@@ -258,13 +256,13 @@ struct hb_utf16_xe_t
return l;
}
- static inline unsigned int
+ static unsigned int
encode_len (hb_codepoint_t unicode)
{
return unicode < 0x10000 ? 1 : 2;
}
- static inline codepoint_t *
+ static codepoint_t *
encode (codepoint_t *text,
const codepoint_t *end,
hb_codepoint_t unicode)
@@ -293,7 +291,7 @@ struct hb_utf32_xe_t
static_assert (sizeof (TCodepoint) == 4, "");
typedef TCodepoint codepoint_t;
- static inline const TCodepoint *
+ static const TCodepoint *
next (const TCodepoint *text,
const TCodepoint *end HB_UNUSED,
hb_codepoint_t *unicode,
@@ -305,7 +303,7 @@ struct hb_utf32_xe_t
return text;
}
- static inline const TCodepoint *
+ static const TCodepoint *
prev (const TCodepoint *text,
const TCodepoint *start HB_UNUSED,
hb_codepoint_t *unicode,
@@ -317,7 +315,7 @@ struct hb_utf32_xe_t
return text;
}
- static inline unsigned int
+ static unsigned int
strlen (const TCodepoint *text)
{
unsigned int l = 0;
@@ -325,13 +323,13 @@ struct hb_utf32_xe_t
return l;
}
- static inline unsigned int
+ static unsigned int
encode_len (hb_codepoint_t unicode HB_UNUSED)
{
return 1;
}
- static inline codepoint_t *
+ static codepoint_t *
encode (codepoint_t *text,
const codepoint_t *end HB_UNUSED,
hb_codepoint_t unicode)
@@ -351,7 +349,7 @@ struct hb_latin1_t
{
typedef uint8_t codepoint_t;
- static inline const codepoint_t *
+ static const codepoint_t *
next (const codepoint_t *text,
const codepoint_t *end HB_UNUSED,
hb_codepoint_t *unicode,
@@ -361,7 +359,7 @@ struct hb_latin1_t
return text;
}
- static inline const codepoint_t *
+ static const codepoint_t *
prev (const codepoint_t *text,
const codepoint_t *start HB_UNUSED,
hb_codepoint_t *unicode,
@@ -371,7 +369,7 @@ struct hb_latin1_t
return text;
}
- static inline unsigned int
+ static unsigned int
strlen (const codepoint_t *text)
{
unsigned int l = 0;
@@ -379,13 +377,13 @@ struct hb_latin1_t
return l;
}
- static inline unsigned int
+ static unsigned int
encode_len (hb_codepoint_t unicode HB_UNUSED)
{
return 1;
}
- static inline codepoint_t *
+ static codepoint_t *
encode (codepoint_t *text,
const codepoint_t *end HB_UNUSED,
hb_codepoint_t unicode)
@@ -402,7 +400,7 @@ struct hb_ascii_t
{
typedef uint8_t codepoint_t;
- static inline const codepoint_t *
+ static const codepoint_t *
next (const codepoint_t *text,
const codepoint_t *end HB_UNUSED,
hb_codepoint_t *unicode,
@@ -414,7 +412,7 @@ struct hb_ascii_t
return text;
}
- static inline const codepoint_t *
+ static const codepoint_t *
prev (const codepoint_t *text,
const codepoint_t *start HB_UNUSED,
hb_codepoint_t *unicode,
@@ -426,7 +424,7 @@ struct hb_ascii_t
return text;
}
- static inline unsigned int
+ static unsigned int
strlen (const codepoint_t *text)
{
unsigned int l = 0;
@@ -434,13 +432,13 @@ struct hb_ascii_t
return l;
}
- static inline unsigned int
+ static unsigned int
encode_len (hb_codepoint_t unicode HB_UNUSED)
{
return 1;
}
- static inline codepoint_t *
+ static codepoint_t *
encode (codepoint_t *text,
const codepoint_t *end HB_UNUSED,
hb_codepoint_t unicode)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-vector.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-vector.hh
index 787512f9221..d8e3f4ef109 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-vector.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-vector.hh
@@ -21,7 +21,6 @@
* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
- * Red Hat Author(s): Behdad Esfahbod
* Google Author(s): Behdad Esfahbod
*/
@@ -29,19 +28,18 @@
#define HB_VECTOR_HH
#include "hb.hh"
+#include "hb-array.hh"
template <typename Type, unsigned int PreallocedCount=8>
struct hb_vector_t
{
- static_assert ((bool) (unsigned) hb_static_size (Type), "");
-
typedef Type ItemType;
- enum { item_size = sizeof (Type) };
+ enum { item_size = hb_static_size (Type) };
HB_NO_COPY_ASSIGN_TEMPLATE2 (hb_vector_t, Type, PreallocedCount);
- inline hb_vector_t (void) { init (); }
- inline ~hb_vector_t (void) { fini (); }
+ hb_vector_t () { init (); }
+ ~hb_vector_t () { fini (); }
unsigned int len;
private:
@@ -50,21 +48,21 @@ struct hb_vector_t
Type static_array[PreallocedCount];
public:
- void init (void)
+ void init ()
{
len = 0;
allocated = ARRAY_LENGTH (static_array);
arrayZ_ = nullptr;
}
- inline void fini (void)
+ void fini ()
{
if (arrayZ_)
free (arrayZ_);
arrayZ_ = nullptr;
allocated = len = 0;
}
- inline void fini_deep (void)
+ void fini_deep ()
{
Type *array = arrayZ();
unsigned int count = len;
@@ -73,57 +71,77 @@ struct hb_vector_t
fini ();
}
- inline Type * arrayZ (void)
- { return arrayZ_ ? arrayZ_ : static_array; }
- inline const Type * arrayZ (void) const
- { return arrayZ_ ? arrayZ_ : static_array; }
+ Type * arrayZ () { return arrayZ_ ? arrayZ_ : static_array; }
+ const Type * arrayZ () const { return arrayZ_ ? arrayZ_ : static_array; }
- inline Type& operator [] (unsigned int i)
+ Type& operator [] (int i_)
{
+ unsigned int i = (unsigned int) i_;
if (unlikely (i >= len))
return Crap (Type);
return arrayZ()[i];
}
- inline const Type& operator [] (unsigned int i) const
+ const Type& operator [] (int i_) const
{
+ unsigned int i = (unsigned int) i_;
if (unlikely (i >= len))
return Null(Type);
return arrayZ()[i];
}
- inline hb_array_t<Type> as_array (void)
+ hb_array_t<Type> as_array ()
{ return hb_array (arrayZ(), len); }
- inline hb_array_t<const Type> as_array (void) const
+ hb_array_t<const Type> as_array () const
{ return hb_array (arrayZ(), len); }
- inline hb_sorted_array_t<Type> as_sorted_array (void)
+ hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int count) const
+ { return as_array ().sub_array (start_offset, count);}
+ hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */) const
+ { return as_array ().sub_array (start_offset, count);}
+ hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int count)
+ { return as_array ().sub_array (start_offset, count);}
+ hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */)
+ { return as_array ().sub_array (start_offset, count);}
+
+ hb_sorted_array_t<Type> as_sorted_array ()
{ return hb_sorted_array (arrayZ(), len); }
- inline hb_sorted_array_t<const Type> as_sorted_array (void) const
+ hb_sorted_array_t<const Type> as_sorted_array () const
{ return hb_sorted_array (arrayZ(), len); }
- template <typename T> inline operator T * (void) { return arrayZ(); }
- template <typename T> inline operator const T * (void) const { return arrayZ(); }
+ hb_array_t<const Type> sorted_sub_array (unsigned int start_offset, unsigned int count) const
+ { return as_sorted_array ().sorted_sub_array (start_offset, count);}
+ hb_array_t<const Type> sorted_sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */) const
+ { return as_sorted_array ().sorted_sub_array (start_offset, count);}
+ hb_array_t<Type> sorted_sub_array (unsigned int start_offset, unsigned int count)
+ { return as_sorted_array ().sorted_sub_array (start_offset, count);}
+ hb_array_t<Type> sorted_sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */)
+ { return as_sorted_array ().sorted_sub_array (start_offset, count);}
+
+ template <typename T> explicit_operator T * () { return arrayZ(); }
+ template <typename T> explicit_operator const T * () const { return arrayZ(); }
+ operator hb_array_t<Type> () { return as_array (); }
+ operator hb_array_t<const Type> () const { return as_array (); }
- inline Type * operator + (unsigned int i) { return arrayZ() + i; }
- inline const Type * operator + (unsigned int i) const { return arrayZ() + i; }
+ Type * operator + (unsigned int i) { return arrayZ() + i; }
+ const Type * operator + (unsigned int i) const { return arrayZ() + i; }
- inline Type *push (void)
+ Type *push ()
{
if (unlikely (!resize (len + 1)))
return &Crap(Type);
return &arrayZ()[len - 1];
}
- inline Type *push (const Type& v)
+ Type *push (const Type& v)
{
Type *p = push ();
*p = v;
return p;
}
- inline bool in_error (void) const { return allocated == 0; }
+ bool in_error () const { return allocated == 0; }
/* Allocate for size but don't adjust len. */
- inline bool alloc (unsigned int size)
+ bool alloc (unsigned int size)
{
if (unlikely (!allocated))
return false;
@@ -164,7 +182,7 @@ struct hb_vector_t
return true;
}
- inline bool resize (int size_)
+ bool resize (int size_)
{
unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
if (!alloc (size))
@@ -177,13 +195,13 @@ struct hb_vector_t
return true;
}
- inline void pop (void)
+ void pop ()
{
if (!len) return;
len--;
}
- inline void remove (unsigned int i)
+ void remove (unsigned int i)
{
if (unlikely (i >= len))
return;
@@ -194,7 +212,7 @@ struct hb_vector_t
len--;
}
- inline void shrink (int size_)
+ void shrink (int size_)
{
unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
if (size < len)
@@ -202,7 +220,7 @@ struct hb_vector_t
}
template <typename T>
- inline Type *find (T v)
+ Type *find (T v)
{
Type *array = arrayZ();
for (unsigned int i = 0; i < len; i++)
@@ -211,7 +229,7 @@ struct hb_vector_t
return nullptr;
}
template <typename T>
- inline const Type *find (T v) const
+ const Type *find (T v) const
{
const Type *array = arrayZ();
for (unsigned int i = 0; i < len; i++)
@@ -220,26 +238,26 @@ struct hb_vector_t
return nullptr;
}
- inline void qsort (int (*cmp)(const void*, const void*))
+ void qsort (int (*cmp)(const void*, const void*))
{ as_array ().qsort (cmp); }
- inline void qsort (unsigned int start = 0, unsigned int end = (unsigned int) -1)
+ void qsort (unsigned int start = 0, unsigned int end = (unsigned int) -1)
{ as_array ().qsort (start, end); }
template <typename T>
- inline Type *lsearch (const T &x, Type *not_found = nullptr)
+ Type *lsearch (const T &x, Type *not_found = nullptr)
{ return as_array ().lsearch (x, not_found); }
template <typename T>
- inline const Type *lsearch (const T &x, const Type *not_found = nullptr) const
+ const Type *lsearch (const T &x, const Type *not_found = nullptr) const
{ return as_array ().lsearch (x, not_found); }
template <typename T>
- inline Type *bsearch (const T &x, Type *not_found = nullptr)
+ Type *bsearch (const T &x, Type *not_found = nullptr)
{ return as_sorted_array ().bsearch (x, not_found); }
template <typename T>
- inline const Type *bsearch (const T &x, const Type *not_found = nullptr) const
+ const Type *bsearch (const T &x, const Type *not_found = nullptr) const
{ return as_sorted_array ().bsearch (x, not_found); }
template <typename T>
- inline bool bfind (const T &x, unsigned int *i = nullptr,
+ bool bfind (const T &x, unsigned int *i = nullptr,
hb_bfind_not_found_t not_found = HB_BFIND_NOT_FOUND_DONT_STORE,
unsigned int to_store = (unsigned int) -1) const
{ return as_sorted_array ().bfind (x, i, not_found, to_store); }
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb.hh
index 6df0a55b1bb..a55e92d5ddc 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb.hh
@@ -29,12 +29,36 @@
#ifndef HB_HH
#define HB_HH
-#define _GNU_SOURCE 1
-
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
+/*
+ * Following added based on what AC_USE_SYSTEM_EXTENSIONS adds to
+ * config.h.in. Copied here for the convenience of those embedding
+ * HarfBuzz and not using our build system.
+ */
+/* Enable extensions on AIX 3, Interix. */
+#ifndef _ALL_SOURCE
+# define _ALL_SOURCE 1
+#endif
+/* Enable GNU extensions on systems that have them. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+/* Enable threading extensions on Solaris. */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# define _POSIX_PTHREAD_SEMANTICS 1
+#endif
+/* Enable extensions on HP NonStop. */
+#ifndef _TANDEM_SOURCE
+# define _TANDEM_SOURCE 1
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# define __EXTENSIONS__ 1
+#endif
+
#ifndef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 200809L
#endif
@@ -137,14 +161,14 @@ struct _hb_alignof
/* https://github.com/harfbuzz/harfbuzz/issues/1127 */
#ifndef explicit_operator
-#define explicit_operator
+#define explicit_operator operator
#endif
#else /* __cplusplus >= 201103L */
/* https://github.com/harfbuzz/harfbuzz/issues/1127 */
#ifndef explicit_operator
-#define explicit_operator explicit
+#define explicit_operator explicit operator
#endif
#endif /* __cplusplus < 201103L */
@@ -357,21 +381,21 @@ static_assert ((sizeof (hb_var_int_t) == 4), "");
TypeName(const TypeName<T1, T2>&); \
void operator=(const TypeName<T1, T2>&)
#define HB_NO_CREATE_COPY_ASSIGN(TypeName) \
- TypeName(void); \
+ TypeName(); \
TypeName(const TypeName&); \
void operator=(const TypeName&)
#define HB_NO_CREATE_COPY_ASSIGN_TEMPLATE(TypeName, T) \
- TypeName(void); \
+ TypeName(); \
TypeName(const TypeName<T>&); \
void operator=(const TypeName<T>&)
#define HB_NO_CREATE_COPY_ASSIGN_TEMPLATE2(TypeName, T1, T2) \
- TypeName(void); \
+ TypeName(); \
TypeName(const TypeName<T1, T2>&); \
void operator=(const TypeName<T1, T2>&)
#else /* __cpluspplus >= 201103L */
-#define HB_NO_COPY_ASSIGN(TypeName)
+#define HB_NO_COPY_ASSIGN(TypeName) static_assert (true, "")
#define HB_NO_COPY_ASSIGN_TEMPLATE2(TypeName, T1, T2) static_assert (true, "")
#define HB_NO_CREATE_COPY_ASSIGN(TypeName) static_assert (true, "")
#define HB_NO_CREATE_COPY_ASSIGN_TEMPLATE(TypeName, T) static_assert (true, "")
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/test-name-table.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/test-name-table.cc
index 58c98f07ab6..518e4eb6e64 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/test-name-table.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/test-name-table.cc
@@ -24,7 +24,7 @@
* Google Author(s): Behdad Esfahbod
*/
-#include "hb.h"
+#include "hb.hh"
#include "hb-ot.h"
#include <stdlib.h>
@@ -41,7 +41,7 @@ main (int argc, char **argv)
hb_blob_t *blob = hb_blob_create_from_file (argv[1]);
hb_face_t *face = hb_face_create (blob, 0 /* first face */);
hb_blob_destroy (blob);
- blob = NULL;
+ blob = nullptr;
unsigned int count;
const hb_ot_name_entry_t *entries = hb_ot_name_list_names (face, &count);
@@ -63,5 +63,7 @@ main (int argc, char **argv)
printf ("%s\n", buf);
}
+ hb_face_destroy (face);
+
return count ? 0 : 1;
}
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
index d9342d7bb28..ec9d17acd23 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/test-unicode-ranges.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/test-unicode-ranges.cc
@@ -42,7 +42,7 @@ test (hb_codepoint_t cp, unsigned int bit)
}
static void
-test_get_unicode_range_bit (void)
+test_get_unicode_range_bit ()
{
test (0x0000, 0);
test (0x0042, 0);
@@ -60,7 +60,7 @@ test_get_unicode_range_bit (void)
}
int
-main (void)
+main ()
{
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 40fd2dd62fa..3cff7bec5da 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-face.h \
$(HARFBUZZ_SRC)/hb-font.h \
$(HARFBUZZ_SRC)/hb-map.h \
+ $(HARFBUZZ_SRC)/hb-ot-deprecated.h \
$(HARFBUZZ_SRC)/hb-set.h \
$(HARFBUZZ_SRC)/hb-shape.h \
$(HARFBUZZ_SRC)/hb-shape-plan.h \
diff --git a/Build/source/libs/harfbuzz/include/Makefile.in b/Build/source/libs/harfbuzz/include/Makefile.in
index 4abd75999eb..427e2ee8436 100644
--- a/Build/source/libs/harfbuzz/include/Makefile.in
+++ b/Build/source/libs/harfbuzz/include/Makefile.in
@@ -255,14 +255,14 @@ hdr_links = $(HARFBUZZ_SRC)/hb.h $(HARFBUZZ_SRC)/hb-aat-layout.h \
$(HARFBUZZ_SRC)/hb-buffer.h $(HARFBUZZ_SRC)/hb-common.h \
$(HARFBUZZ_SRC)/hb-deprecated.h $(HARFBUZZ_SRC)/hb-face.h \
$(HARFBUZZ_SRC)/hb-font.h $(HARFBUZZ_SRC)/hb-map.h \
- $(HARFBUZZ_SRC)/hb-set.h $(HARFBUZZ_SRC)/hb-shape.h \
- $(HARFBUZZ_SRC)/hb-shape-plan.h $(HARFBUZZ_SRC)/hb-unicode.h \
- $(HARFBUZZ_BLD)/hb-version.h $(HARFBUZZ_SRC)/hb-ot.h \
- $(HARFBUZZ_SRC)/hb-ot-color.h $(HARFBUZZ_SRC)/hb-ot-font.h \
- $(HARFBUZZ_SRC)/hb-ot-layout.h $(HARFBUZZ_SRC)/hb-ot-math.h \
- $(HARFBUZZ_SRC)/hb-ot-name.h $(HARFBUZZ_SRC)/hb-ot-shape.h \
- $(HARFBUZZ_SRC)/hb-ot-var.h $(HARFBUZZ_SRC)/hb-icu.h \
- $(HARFBUZZ_SRC)/hb-graphite2.h
+ $(HARFBUZZ_SRC)/hb-ot-deprecated.h $(HARFBUZZ_SRC)/hb-set.h \
+ $(HARFBUZZ_SRC)/hb-shape.h $(HARFBUZZ_SRC)/hb-shape-plan.h \
+ $(HARFBUZZ_SRC)/hb-unicode.h $(HARFBUZZ_BLD)/hb-version.h \
+ $(HARFBUZZ_SRC)/hb-ot.h $(HARFBUZZ_SRC)/hb-ot-color.h \
+ $(HARFBUZZ_SRC)/hb-ot-font.h $(HARFBUZZ_SRC)/hb-ot-layout.h \
+ $(HARFBUZZ_SRC)/hb-ot-math.h $(HARFBUZZ_SRC)/hb-ot-name.h \
+ $(HARFBUZZ_SRC)/hb-ot-shape.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 e56953ba37f..b28299de084 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], [2.2.0])
+m4_define([harfbuzz_version], [2.3.0])