summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Build/source/libs/harfbuzz/Makefile.am3
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14-PATCHES/ChangeLog (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13-PATCHES/ChangeLog)5
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14-PATCHES/TL-Changes (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13-PATCHES/TL-Changes)1
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/AUTHORS (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/AUTHORS)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/Android.mk (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/Android.mk)4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/ChangeLog (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/ChangeLog)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/Makefile.am (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/Makefile.am)17
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/NEWS (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/NEWS)14
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/README (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/README)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/THANKS (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/THANKS)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/TODO (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/TODO)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.14/autogen.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/autogen.sh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/config.h.in (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/config.h.in)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/configure.ac (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/configure.ac)40
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/harfbuzz.doap (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/harfbuzz.doap)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/harfbuzz.pc.in (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/harfbuzz.pc.in)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/Makefile.am (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/Makefile.am)19
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-c-linkage-decls.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-c-linkage-decls.sh)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-header-guards.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-header-guards.sh)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-includes.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-includes.sh)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-libstdc++.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-libstdc++.sh)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-static-inits.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-static-inits.sh)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-symbols.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-symbols.sh)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.14/src/gen-arabic-table.py (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/gen-arabic-table.py)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.14/src/gen-indic-table.py (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/gen-indic-table.py)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-atomic-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-atomic-private.hh)14
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-blob.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-blob.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-blob.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-blob.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-json.hh643
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-json.rl132
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-text.hh571
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-text.rl126
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-buffer-private.hh)3
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-serialize.cc336
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-buffer.cc)241
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-buffer.h)6
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-cache-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-cache-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-common.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-common.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-common.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-common.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-coretext.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-coretext.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-coretext.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-coretext.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-fallback-shape.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-fallback-shape.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-font-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-font-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-font.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-font.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-font.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-font.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ft.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ft.cc)13
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ft.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ft.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-glib.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-glib.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-glib.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-glib.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-gobject-enums.cc.tmpl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-gobject-enums.cc.tmpl)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-gobject-structs.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-gobject-structs.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-gobject.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-gobject.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-graphite2.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-graphite2.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-graphite2.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-graphite2.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-icu-le.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-icu-le.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-icu.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-icu.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-icu.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-icu.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-mutex-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-mutex-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-object-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-object-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-old.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-old.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-open-file-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-open-file-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-open-type-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-open-type-private.hh)11
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-head-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-head-table.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-hhea-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-hhea-table.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-hmtx-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-hmtx-table.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-common-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-common-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-gdef-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-gdef-table.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-gpos-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-gpos-table.hh)105
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-gsub-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-gsub-table.hh)159
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-gsubgpos-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-gsubgpos-private.hh)66
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-private.hh)4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout.cc)8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-map-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-map-private.hh)10
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-map.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-map.cc)18
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-maxp-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-maxp-table.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-name-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-name-table.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-arabic-fallback.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-arabic-fallback.hh)2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-arabic-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-arabic-table.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-arabic.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-arabic.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-default.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-default.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic-machine.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic-machine.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic-machine.rl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic-machine.rl)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic-table.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic-table.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic.cc)74
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-myanmar-machine.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-myanmar-machine.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-myanmar-machine.rl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-myanmar-machine.rl)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-myanmar.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-myanmar.cc)4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-sea-machine.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-sea-machine.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-sea-machine.rl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-sea-machine.rl)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-sea.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-sea.cc)4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-thai.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-thai.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-fallback-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-fallback-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-fallback.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-fallback.cc)2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-normalize-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-normalize-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-normalize.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-normalize.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-tag.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-tag.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-tag.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-tag.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-private.hh)25
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-set-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-set-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-set.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-set.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-set.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-set.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape-plan-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape-plan-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape-plan.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape-plan.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape-plan.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape-plan.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape.cc)13
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shaper-impl-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shaper-impl-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shaper-list.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shaper-list.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shaper-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shaper-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shaper.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shaper.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-tt-font.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-tt-font.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ucdn.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ucdn.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-unicode-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-unicode-private.hh)10
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-unicode.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-unicode.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-unicode.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-unicode.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-uniscribe.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-uniscribe.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-uniscribe.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-uniscribe.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-utf-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-utf-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-version.h.in (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-version.h.in)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-warning.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-warning.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/main.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/main.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/test-buffer-serialize.cc126
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/test-size-params.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/test-size-params.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/test-would-substitute.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/test-would-substitute.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/test.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/test.cc)0
-rw-r--r--Build/source/libs/harfbuzz/version.ac2
133 files changed, 2321 insertions, 510 deletions
diff --git a/Build/source/libs/harfbuzz/Makefile.am b/Build/source/libs/harfbuzz/Makefile.am
index 734aafc4f8a..8b3036da85b 100644
--- a/Build/source/libs/harfbuzz/Makefile.am
+++ b/Build/source/libs/harfbuzz/Makefile.am
@@ -37,7 +37,10 @@ libharfbuzz_dependencies =
libharfbuzz_a_SOURCES = \
@HARFBUZZ_TREE@/src/hb-atomic-private.hh \
@HARFBUZZ_TREE@/src/hb-blob.cc \
+ @HARFBUZZ_TREE@/src/hb-buffer-deserialize-json.hh \
+ @HARFBUZZ_TREE@/src/hb-buffer-deserialize-text.hh \
@HARFBUZZ_TREE@/src/hb-buffer-private.hh \
+ @HARFBUZZ_TREE@/src/hb-buffer-serialize.cc \
@HARFBUZZ_TREE@/src/hb-buffer.cc \
@HARFBUZZ_TREE@/src/hb-cache-private.hh \
@HARFBUZZ_TREE@/src/hb-common.cc \
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13-PATCHES/ChangeLog b/Build/source/libs/harfbuzz/harfbuzz-0.9.14-PATCHES/ChangeLog
index cd9d27b1036..bb62aac75d1 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13-PATCHES/ChangeLog
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14-PATCHES/ChangeLog
@@ -1,3 +1,8 @@
+2013-03-22 Khaled Hosny <khaledhosny@eglug.org>
+
+ Imported harfbuzz-0.9.14 source tree from:
+ http://www.freedesktop.org/software/harfbuzz/release/
+
2013-02-27 Peter Breitenlohner <peb@mppmu.mpg.de>
Imported harfbuzz-0.9.13 source tree from:
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13-PATCHES/TL-Changes b/Build/source/libs/harfbuzz/harfbuzz-0.9.14-PATCHES/TL-Changes
index b2c13fdd688..1475a1e94c7 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13-PATCHES/TL-Changes
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14-PATCHES/TL-Changes
@@ -13,6 +13,7 @@ Removed:
missing
Makefile.in
aclocal.m4
+ ar-lib
configure
src/Makefile.in
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/AUTHORS b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/AUTHORS
index c611d7d4769..c611d7d4769 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/AUTHORS
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/AUTHORS
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/Android.mk b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/Android.mk
index 832d55e475a..3ada5f2e884 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/Android.mk
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/Android.mk
@@ -28,6 +28,7 @@ LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES:= \
src/hb-blob.cc \
+ src/hb-buffer-serialize.cc \
src/hb-buffer.cc \
src/hb-common.cc \
src/hb-fallback-shape.cc \
@@ -46,6 +47,9 @@ LOCAL_SRC_FILES:= \
src/hb-ot-shape-complex-arabic.cc \
src/hb-ot-shape-complex-default.cc \
src/hb-ot-shape-complex-indic.cc \
+ src/hb-ot-shape-complex-indic-table.cc \
+ src/hb-ot-shape-complex-myanmar.cc \
+ src/hb-ot-shape-complex-sea.cc \
src/hb-ot-shape-complex-thai.cc \
src/hb-ot-shape-normalize.cc \
src/hb-ot-shape-fallback.cc \
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/ChangeLog b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/ChangeLog
index 014604b9691..014604b9691 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/ChangeLog
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/ChangeLog
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/Makefile.am b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/Makefile.am
index 0d9b17144ed..19c209579a4 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/Makefile.am
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/Makefile.am
@@ -16,21 +16,12 @@ EXTRA_DIST = \
$(NULL)
MAINTAINERCLEANFILES = \
+ $(GITIGNORE_MAINTAINERCLEANFILES_TOPLEVEL) \
+ $(GITIGNORE_MAINTAINERCLEANFILES_M4_LIBTOOL) \
+ $(GITIGNORE_MAINTAINERCLEANFILES_MAKEFILE_IN) \
$(srcdir)/INSTALL \
- $(srcdir)/aclocal.m4 \
- $(srcdir)/autoscan.log \
- $(srcdir)/compile \
- $(srcdir)/config.guess \
- $(srcdir)/config.h.in \
- $(srcdir)/config.sub \
- $(srcdir)/configure.scan \
- $(srcdir)/depcomp \
- $(srcdir)/install-sh \
- $(srcdir)/ltmain.sh \
- $(srcdir)/missing \
- $(srcdir)/mkinstalldirs \
$(srcdir)/ChangeLog \
- `find "$(srcdir)" -type f -name Makefile.in -print`
+ $(NULL)
#
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/NEWS b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/NEWS
index 7e8d5bdada8..858a916433c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/NEWS
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/NEWS
@@ -1,3 +1,17 @@
+Overview of changes leading to 0.9.14
+Thursday, March 21, 2013
+=====================================
+
+- Build fixes.
+- Fix time-consuming sanitize with malicious fonts.
+- Implement hb_buffer_deserialize_glyphs() for both json and text.
+- Do not ignore Hangul filler characters.
+- Indic fixes:
+ * Fix Malayalam pre-base reordering interaction with post-forms.
+ * Further adjust ZWJ handling. Should fix known regressions from
+ 0.9.13.
+
+
Overview of changes leading to 0.9.13
Thursday, February 25, 2013
=====================================
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/README b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/README
index 74e739da52a..74e739da52a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/README
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/README
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/THANKS b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/THANKS
index 940cfde5c39..940cfde5c39 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/THANKS
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/THANKS
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/TODO b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/TODO
index 31b44b84234..31b44b84234 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/TODO
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/TODO
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/autogen.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/autogen.sh
index 833a6219c86..833a6219c86 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/autogen.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/autogen.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/config.h.in b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/config.h.in
index bba8fa30ac2..bba8fa30ac2 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/config.h.in
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/config.h.in
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/configure.ac b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/configure.ac
index b4249cd5429..f05ca653228 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/configure.ac
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/configure.ac
@@ -1,6 +1,6 @@
AC_PREREQ([2.64])
AC_INIT([HarfBuzz],
- [0.9.13],
+ [0.9.14],
[http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz],
[harfbuzz],
[http://harfbuzz.org/])
@@ -13,6 +13,7 @@ AM_INIT_AUTOMAKE([1.11.1 gnits dist-bzip2 no-dist-gzip -Wall no-define color-tes
AM_SILENT_RULES([yes])
# Initialize libtool
+AM_PROG_AR
LT_PREREQ([2.2])
LT_INIT([disable-static])
@@ -172,6 +173,25 @@ AM_CONDITIONAL(HAVE_CAIRO_FT, $have_cairo_ft)
dnl ==========================================================================
PKG_CHECK_MODULES(ICU, icu-uc, have_icu=true, have_icu=false)
+dnl Fallback to icu-config if ICU pkg-config files could not be found
+if test "$have_icu" != "true"; then
+ AC_PATH_PROG(icu_config, icu-config, no)
+ AC_MSG_CHECKING([for ICU by using icu-config fallback])
+ if test "$icu_config" != "no" && "$icu_config" --version >/dev/null; then
+ have_icu=true
+ # We don't use --cflags as this gives us a lot of things that we don't
+ # necessarily want, like debugging and optimization flags
+ # See man (1) icu-config for more info.
+ ICU_CFLAGS=`$icu_config --cppflags`
+ ICU_LIBS=`$icu_config --ldflags-libsonly`
+ AC_SUBST(ICU_CFLAGS)
+ AC_SUBST(ICU_LIBS)
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+fi
+
if $have_icu; then
CXXFLAGS="$CXXFLAGS `$PKG_CONFIG --variable=CXXFLAGS icu-uc`"
AC_DEFINE(HAVE_ICU, 1, [Have ICU library])
@@ -181,6 +201,24 @@ AM_CONDITIONAL(HAVE_ICU, $have_icu)
dnl ==========================================================================
PKG_CHECK_MODULES(ICU_LE, icu-le icu-uc, have_icu_le=true, have_icu_le=false)
+dnl Fallback to icu-config if ICU pkg-config files could not be found
+if test "$have_icu_le" != "true"; then
+ AC_PATH_PROG(icu_config, icu-config, no)
+ AC_MSG_CHECKING([for ICU_LE by using icu-config fallback])
+ if test "$icu_config" != "no" && "$icu_config" --version >/dev/null; then
+ have_icu_le=true
+ # We don't use --cflags as this gives us a lot of things that we don't
+ # necessarily want, like debugging and optimization flags
+ # See man (1) icu-config for more info.
+ ICU_LE_CFLAGS=`$icu_config --cppflags`
+ ICU_LE_LIBS=`$icu_config --ldflags-libsonly --ldflags-layout`
+ AC_SUBST(ICU_LE_CFLAGS)
+ AC_SUBST(ICU_LE_LIBS)
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+fi
if $have_icu_le; then
AC_DEFINE(HAVE_ICU_LE, 1, [Have ICU Layout Engine library])
fi
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/harfbuzz.doap b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/harfbuzz.doap
index d2896ebefa8..d2896ebefa8 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/harfbuzz.doap
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/harfbuzz.doap
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/harfbuzz.pc.in b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/harfbuzz.pc.in
index e92319e156c..e92319e156c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/harfbuzz.pc.in
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/harfbuzz.pc.in
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/Makefile.am b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/Makefile.am
index 3b0444e046c..342a3fb388c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/Makefile.am
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/Makefile.am
@@ -20,7 +20,10 @@ HBLIBS =
HBSOURCES = \
hb-atomic-private.hh \
hb-blob.cc \
+ hb-buffer-deserialize-json.hh \
+ hb-buffer-deserialize-text.hh \
hb-buffer-private.hh \
+ hb-buffer-serialize.cc \
hb-buffer.cc \
hb-cache-private.hh \
hb-common.cc \
@@ -257,11 +260,15 @@ arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt
.PHONY: unicode-tables arabic-table indic-table
BUILT_SOURCES += \
+ hb-buffer-deserialize-json.hh \
+ hb-buffer-deserialize-text.hh \
hb-ot-shape-complex-indic-machine.hh \
hb-ot-shape-complex-myanmar-machine.hh \
hb-ot-shape-complex-sea-machine.hh \
$(NULL)
EXTRA_DIST += \
+ hb-buffer-deserialize-json.rl \
+ hb-buffer-deserialize-text.rl \
hb-ot-shape-complex-indic-machine.rl \
hb-ot-shape-complex-myanmar-machine.rl \
hb-ot-shape-complex-sea-machine.rl \
@@ -270,7 +277,13 @@ EXTRA_DIST += \
$(AM_V_GEN)$(top_srcdir)/missing --run ragel -e -F1 -o "$@.tmp" "$<" && \
mv "$@.tmp" "$@" || ( $(RM) "$@.tmp" && false )
-noinst_PROGRAMS = main test test-would-substitute test-size-params
+noinst_PROGRAMS = \
+ main \
+ test \
+ test-buffer-serialize \
+ test-size-params \
+ test-would-substitute \
+ $(NULL)
bin_PROGRAMS =
main_SOURCES = main.cc
@@ -289,6 +302,10 @@ test_size_params_SOURCES = test-size-params.cc
test_size_params_CPPFLAGS = $(HBCFLAGS)
test_size_params_LDADD = libharfbuzz.la $(HBLIBS)
+test_buffer_serialize_SOURCES = test-buffer-serialize.cc
+test_buffer_serialize_CPPFLAGS = $(HBCFLAGS)
+test_buffer_serialize_LDADD = libharfbuzz.la $(HBLIBS)
+
dist_check_SCRIPTS = \
check-c-linkage-decls.sh \
check-header-guards.sh \
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-c-linkage-decls.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-c-linkage-decls.sh
index 44cdfa0f23c..44cdfa0f23c 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-c-linkage-decls.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-c-linkage-decls.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-header-guards.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-header-guards.sh
index af9fa7fc24e..af9fa7fc24e 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-header-guards.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-header-guards.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-includes.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-includes.sh
index 79323a74fb2..79323a74fb2 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-includes.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-includes.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-libstdc++.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-libstdc++.sh
index e7e0e295e1a..e7e0e295e1a 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-libstdc++.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-libstdc++.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-static-inits.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-static-inits.sh
index bb0a7ff630d..bb0a7ff630d 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-static-inits.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-static-inits.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-symbols.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-symbols.sh
index 4c03c137406..4c03c137406 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/check-symbols.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/check-symbols.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/gen-arabic-table.py b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/gen-arabic-table.py
index da5a4fcbf5c..da5a4fcbf5c 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/gen-arabic-table.py
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/gen-arabic-table.py
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/gen-indic-table.py b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/gen-indic-table.py
index 9ed3fd6d34d..9ed3fd6d34d 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/gen-indic-table.py
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/gen-indic-table.py
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-atomic-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-atomic-private.hh
index bb10fe1d577..7047e216cff 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-atomic-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-atomic-private.hh
@@ -47,22 +47,10 @@
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
-/* mingw32 does not have MemoryBarrier.
- * MemoryBarrier may be defined as a macro or a function.
- * Just make a failsafe version for ourselves. */
-#ifdef MemoryBarrier
-#define HBMemoryBarrier MemoryBarrier
-#else
-static inline void HBMemoryBarrier (void) {
- long dummy = 0;
- InterlockedExchange (&dummy, 1);
-}
-#endif
-
typedef LONG hb_atomic_int_t;
#define hb_atomic_int_add(AI, V) InterlockedExchangeAdd (&(AI), (V))
-#define hb_atomic_ptr_get(P) (HBMemoryBarrier (), (void *) *(P))
+#define hb_atomic_ptr_get(P) (MemoryBarrier (), (void *) *(P))
#define hb_atomic_ptr_cmpexch(P,O,N) (InterlockedCompareExchangePointer ((void **) (P), (void *) (N), (void *) (O)) == (void *) (O))
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-blob.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-blob.cc
index dfd134b7762..dfd134b7762 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-blob.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-blob.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-blob.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-blob.h
index d3d0f41b11c..d3d0f41b11c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-blob.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-blob.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-json.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-json.hh
new file mode 100644
index 00000000000..dead700db82
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-json.hh
@@ -0,0 +1,643 @@
+
+#line 1 "../../src/hb-buffer-deserialize-json.rl"
+/*
+ * Copyright © 2013 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_BUFFER_DESERIALIZE_JSON_HH
+#define HB_BUFFER_DESERIALIZE_JSON_HH
+
+#include "hb-private.hh"
+
+
+#line 36 "hb-buffer-deserialize-json.hh.tmp"
+static const unsigned char _deserialize_json_trans_keys[] = {
+ 0u, 0u, 9u, 123u, 9u, 34u, 97u, 103u, 120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u,
+ 48u, 57u, 9u, 125u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u,
+ 9u, 125u, 9u, 125u, 108u, 108u, 34u, 34u, 9u, 58u, 9u, 57u, 9u, 125u, 9u, 125u,
+ 120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 34u, 34u,
+ 9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u,
+ 65u, 122u, 34u, 122u, 9u, 125u, 9u, 125u, 9u, 93u, 9u, 123u, 0u, 0u, 0
+};
+
+static const char _deserialize_json_key_spans[] = {
+ 0, 115, 26, 7, 2, 1, 50, 49,
+ 10, 117, 117, 117, 1, 50, 49, 10,
+ 117, 117, 1, 1, 50, 49, 117, 117,
+ 2, 1, 50, 49, 10, 117, 117, 1,
+ 50, 49, 10, 117, 117, 1, 50, 49,
+ 58, 89, 117, 117, 85, 115, 0
+};
+
+static const short _deserialize_json_index_offsets[] = {
+ 0, 0, 116, 143, 151, 154, 156, 207,
+ 257, 268, 386, 504, 622, 624, 675, 725,
+ 736, 854, 972, 974, 976, 1027, 1077, 1195,
+ 1313, 1316, 1318, 1369, 1419, 1430, 1548, 1666,
+ 1668, 1719, 1769, 1780, 1898, 2016, 2018, 2069,
+ 2119, 2178, 2268, 2386, 2504, 2590, 2706
+};
+
+static const char _deserialize_json_indicies[] = {
+ 0, 0, 0, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 1, 3, 3, 3,
+ 3, 3, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 3, 1, 4, 1,
+ 5, 1, 6, 7, 1, 1, 8, 1,
+ 9, 10, 1, 11, 1, 11, 11, 11,
+ 11, 11, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 11, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 12, 1,
+ 12, 12, 12, 12, 12, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 12,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 13, 1, 1, 14,
+ 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 1, 16, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 1, 18, 18, 18,
+ 18, 18, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 18, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 19, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 20, 1, 21, 21, 21, 21, 21,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 21, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 3, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 22,
+ 1, 18, 18, 18, 18, 18, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 18, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 19, 1, 1, 1,
+ 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 20, 1, 23,
+ 1, 23, 23, 23, 23, 23, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 23, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 24, 1, 24, 24, 24, 24,
+ 24, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 24, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 25, 1, 1, 26, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 1, 28, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 1, 30, 30, 30, 30, 30, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 30, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 31, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 32, 1, 30,
+ 30, 30, 30, 30, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 30, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 31, 1, 1, 1, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 32, 1, 33, 1, 34,
+ 1, 34, 34, 34, 34, 34, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 34, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 35, 1, 35, 35, 35, 35,
+ 35, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 35, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 36, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 1, 38, 38,
+ 38, 38, 38, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 38, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 39, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 40, 1, 38, 38, 38, 38,
+ 38, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 38, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 39,
+ 1, 1, 1, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 40, 1, 42, 43, 1, 44, 1, 44,
+ 44, 44, 44, 44, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 44, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 45, 1, 45, 45, 45, 45, 45, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 45, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 46, 1,
+ 1, 47, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 1, 49, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 1, 51,
+ 51, 51, 51, 51, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 51, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 52, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 53, 1, 51, 51, 51,
+ 51, 51, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 51, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 52, 1, 1, 1, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 53, 1, 54, 1, 54, 54, 54,
+ 54, 54, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 54, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 55, 1,
+ 55, 55, 55, 55, 55, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 55,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 56, 1, 1, 57,
+ 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 1, 59, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 1, 61, 61, 61,
+ 61, 61, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 61, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 62, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 63, 1, 61, 61, 61, 61, 61,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 61, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 62, 1,
+ 1, 1, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 63,
+ 1, 64, 1, 64, 64, 64, 64, 64,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 64, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 65, 1, 65, 65,
+ 65, 65, 65, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 65, 1, 66,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 67, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 1,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 1, 1, 1, 1, 1, 1,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 1, 70, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 71, 71,
+ 1, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 1, 1, 1, 1, 1,
+ 1, 1, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 1, 1, 1, 1,
+ 71, 1, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 1, 72, 72, 72,
+ 72, 72, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 72, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 73, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 74, 1, 72, 72, 72, 72, 72,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 72, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 73, 1,
+ 1, 1, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 74,
+ 1, 76, 76, 76, 76, 76, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 76, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 77, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 78, 1, 0,
+ 0, 0, 0, 0, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 1, 1, 0
+};
+
+static const char _deserialize_json_trans_targs[] = {
+ 1, 0, 2, 2, 3, 4, 18, 24,
+ 37, 5, 12, 6, 7, 8, 9, 11,
+ 9, 11, 10, 2, 44, 10, 44, 13,
+ 14, 15, 16, 17, 16, 17, 10, 2,
+ 44, 19, 20, 21, 22, 23, 10, 2,
+ 44, 23, 25, 31, 26, 27, 28, 29,
+ 30, 29, 30, 10, 2, 44, 32, 33,
+ 34, 35, 36, 35, 36, 10, 2, 44,
+ 38, 39, 40, 42, 43, 41, 10, 41,
+ 10, 2, 44, 43, 44, 45, 46
+};
+
+static const char _deserialize_json_trans_actions[] = {
+ 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 2, 2,
+ 0, 0, 3, 3, 4, 0, 5, 0,
+ 0, 2, 2, 2, 0, 0, 6, 6,
+ 7, 0, 0, 0, 2, 2, 8, 8,
+ 9, 0, 0, 0, 0, 0, 2, 2,
+ 2, 0, 0, 10, 10, 11, 0, 0,
+ 2, 2, 2, 0, 0, 12, 12, 13,
+ 0, 0, 0, 2, 2, 2, 14, 0,
+ 15, 15, 16, 0, 0, 0, 0
+};
+
+static const int deserialize_json_start = 1;
+static const int deserialize_json_first_final = 44;
+static const int deserialize_json_error = 0;
+
+static const int deserialize_json_en_main = 1;
+
+
+#line 97 "../../src/hb-buffer-deserialize-json.rl"
+
+
+static hb_bool_t
+_hb_buffer_deserialize_glyphs_json (hb_buffer_t *buffer,
+ const char *buf,
+ unsigned int buf_len,
+ const char **end_ptr,
+ hb_font_t *font)
+{
+ const char *p = buf, *pe = buf + buf_len;
+
+ /* Ensure we have positions. */
+ (void) hb_buffer_get_glyph_positions (buffer, NULL);
+
+ while (p < pe && ISSPACE (*p))
+ p++;
+ if (p < pe && *p == (buffer->len ? ',' : '['))
+ {
+ *end_ptr = ++p;
+ }
+
+ const char *tok = NULL;
+ int cs;
+ hb_glyph_info_t info;
+ hb_glyph_position_t pos;
+
+#line 466 "hb-buffer-deserialize-json.hh.tmp"
+ {
+ cs = deserialize_json_start;
+ }
+
+#line 471 "hb-buffer-deserialize-json.hh.tmp"
+ {
+ int _slen;
+ int _trans;
+ const unsigned char *_keys;
+ const char *_inds;
+ if ( p == pe )
+ goto _test_eof;
+ if ( cs == 0 )
+ goto _out;
+_resume:
+ _keys = _deserialize_json_trans_keys + (cs<<1);
+ _inds = _deserialize_json_indicies + _deserialize_json_index_offsets[cs];
+
+ _slen = _deserialize_json_key_spans[cs];
+ _trans = _inds[ _slen > 0 && _keys[0] <=(*p) &&
+ (*p) <= _keys[1] ?
+ (*p) - _keys[0] : _slen ];
+
+ cs = _deserialize_json_trans_targs[_trans];
+
+ if ( _deserialize_json_trans_actions[_trans] == 0 )
+ goto _again;
+
+ switch ( _deserialize_json_trans_actions[_trans] ) {
+ case 1:
+#line 38 "../../src/hb-buffer-deserialize-json.rl"
+ {
+ memset (&info, 0, sizeof (info));
+ memset (&pos , 0, sizeof (pos ));
+}
+ break;
+ case 5:
+#line 43 "../../src/hb-buffer-deserialize-json.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 2:
+#line 51 "../../src/hb-buffer-deserialize-json.rl"
+ {
+ tok = p;
+}
+ break;
+ case 14:
+#line 55 "../../src/hb-buffer-deserialize-json.rl"
+ {
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
+ break;
+ case 15:
+#line 62 "../../src/hb-buffer-deserialize-json.rl"
+ { if (!parse_uint (tok, p, &info.codepoint)) return false; }
+ break;
+ case 8:
+#line 63 "../../src/hb-buffer-deserialize-json.rl"
+ { if (!parse_uint (tok, p, &info.cluster )) return false; }
+ break;
+ case 10:
+#line 64 "../../src/hb-buffer-deserialize-json.rl"
+ { if (!parse_int (tok, p, &pos.x_offset )) return false; }
+ break;
+ case 12:
+#line 65 "../../src/hb-buffer-deserialize-json.rl"
+ { if (!parse_int (tok, p, &pos.y_offset )) return false; }
+ break;
+ case 3:
+#line 66 "../../src/hb-buffer-deserialize-json.rl"
+ { if (!parse_int (tok, p, &pos.x_advance)) return false; }
+ break;
+ case 6:
+#line 67 "../../src/hb-buffer-deserialize-json.rl"
+ { if (!parse_int (tok, p, &pos.y_advance)) return false; }
+ break;
+ case 16:
+#line 62 "../../src/hb-buffer-deserialize-json.rl"
+ { if (!parse_uint (tok, p, &info.codepoint)) return false; }
+#line 43 "../../src/hb-buffer-deserialize-json.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 9:
+#line 63 "../../src/hb-buffer-deserialize-json.rl"
+ { if (!parse_uint (tok, p, &info.cluster )) return false; }
+#line 43 "../../src/hb-buffer-deserialize-json.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 11:
+#line 64 "../../src/hb-buffer-deserialize-json.rl"
+ { if (!parse_int (tok, p, &pos.x_offset )) return false; }
+#line 43 "../../src/hb-buffer-deserialize-json.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 13:
+#line 65 "../../src/hb-buffer-deserialize-json.rl"
+ { if (!parse_int (tok, p, &pos.y_offset )) return false; }
+#line 43 "../../src/hb-buffer-deserialize-json.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 4:
+#line 66 "../../src/hb-buffer-deserialize-json.rl"
+ { if (!parse_int (tok, p, &pos.x_advance)) return false; }
+#line 43 "../../src/hb-buffer-deserialize-json.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 7:
+#line 67 "../../src/hb-buffer-deserialize-json.rl"
+ { if (!parse_int (tok, p, &pos.y_advance)) return false; }
+#line 43 "../../src/hb-buffer-deserialize-json.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+#line 624 "hb-buffer-deserialize-json.hh.tmp"
+ }
+
+_again:
+ if ( cs == 0 )
+ goto _out;
+ if ( ++p != pe )
+ goto _resume;
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 125 "../../src/hb-buffer-deserialize-json.rl"
+
+
+ *end_ptr = p;
+
+ return p == pe && *(p-1) != ']';
+}
+
+#endif /* HB_BUFFER_DESERIALIZE_JSON_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-json.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-json.rl
new file mode 100644
index 00000000000..7351b2ab47c
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-json.rl
@@ -0,0 +1,132 @@
+/*
+ * Copyright © 2013 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_BUFFER_DESERIALIZE_JSON_HH
+#define HB_BUFFER_DESERIALIZE_JSON_HH
+
+#include "hb-private.hh"
+
+%%{
+
+machine deserialize_json;
+alphtype unsigned char;
+write data;
+
+action clear_item {
+ memset (&info, 0, sizeof (info));
+ memset (&pos , 0, sizeof (pos ));
+}
+
+action add_item {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+
+action tok {
+ tok = p;
+}
+
+action parse_glyph {
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
+
+action parse_gid { if (!parse_uint (tok, p, &info.codepoint)) return false; }
+action parse_cluster { if (!parse_uint (tok, p, &info.cluster )) return false; }
+action parse_x_offset { if (!parse_int (tok, p, &pos.x_offset )) return false; }
+action parse_y_offset { if (!parse_int (tok, p, &pos.y_offset )) return false; }
+action parse_x_advance { if (!parse_int (tok, p, &pos.x_advance)) return false; }
+action parse_y_advance { if (!parse_int (tok, p, &pos.y_advance)) return false; }
+
+unum = '0' | [1-9] digit*;
+num = '-'? unum;
+
+comma = space* ',' space*;
+colon = space* ':' space*;
+
+glyph_id = unum;
+glyph_name = alpha (alnum|'_'|'.'|'-')*;
+
+glyph_string = '"' (glyph_name >tok %parse_glyph) '"';
+glyph_number = (glyph_id >tok %parse_gid);
+
+glyph = "\"g\"" colon (glyph_string | glyph_number);
+cluster = "\"cl\"" colon (unum >tok %parse_cluster);
+xoffset = "\"dx\"" colon (num >tok %parse_x_offset);
+yoffset = "\"dy\"" colon (num >tok %parse_y_offset);
+xadvance= "\"ax\"" colon (num >tok %parse_x_advance);
+yadvance= "\"ay\"" colon (num >tok %parse_y_advance);
+
+element = glyph | cluster | xoffset | yoffset | xadvance | yadvance;
+item =
+ ( '{' space* element (comma element)* space* '}')
+ >clear_item
+ @add_item
+ ;
+
+main := space* item (comma item)* space* (','|']')?;
+
+}%%
+
+static hb_bool_t
+_hb_buffer_deserialize_glyphs_json (hb_buffer_t *buffer,
+ const char *buf,
+ unsigned int buf_len,
+ const char **end_ptr,
+ hb_font_t *font)
+{
+ const char *p = buf, *pe = buf + buf_len;
+
+ /* Ensure we have positions. */
+ (void) hb_buffer_get_glyph_positions (buffer, NULL);
+
+ while (p < pe && ISSPACE (*p))
+ p++;
+ if (p < pe && *p == (buffer->len ? ',' : '['))
+ {
+ *end_ptr = ++p;
+ }
+
+ const char *tok = NULL;
+ int cs;
+ hb_glyph_info_t info;
+ hb_glyph_position_t pos;
+ %%{
+ write init;
+ write exec;
+ }%%
+
+ *end_ptr = p;
+
+ return p == pe && *(p-1) != ']';
+}
+
+#endif /* HB_BUFFER_DESERIALIZE_JSON_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-text.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-text.hh
new file mode 100644
index 00000000000..a38efe3a415
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-text.hh
@@ -0,0 +1,571 @@
+
+#line 1 "../../src/hb-buffer-deserialize-text.rl"
+/*
+ * Copyright © 2013 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_BUFFER_DESERIALIZE_TEXT_HH
+#define HB_BUFFER_DESERIALIZE_TEXT_HH
+
+#include "hb-private.hh"
+
+
+#line 36 "hb-buffer-deserialize-text.hh.tmp"
+static const unsigned char _deserialize_text_trans_keys[] = {
+ 0u, 0u, 9u, 122u, 45u, 57u, 48u, 57u, 45u, 57u, 48u, 57u, 48u, 57u, 45u, 57u,
+ 48u, 57u, 44u, 44u, 45u, 57u, 48u, 57u, 44u, 57u, 9u, 124u, 9u, 124u, 0u, 0u,
+ 9u, 122u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u,
+ 9u, 124u, 9u, 124u, 9u, 124u, 0
+};
+
+static const char _deserialize_text_key_spans[] = {
+ 0, 114, 13, 10, 13, 10, 10, 13,
+ 10, 1, 13, 10, 14, 116, 116, 0,
+ 114, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116
+};
+
+static const short _deserialize_text_index_offsets[] = {
+ 0, 0, 115, 129, 140, 154, 165, 176,
+ 190, 201, 203, 217, 228, 243, 360, 477,
+ 478, 593, 710, 827, 944, 1061, 1178, 1295,
+ 1412, 1529, 1646
+};
+
+static const char _deserialize_text_indicies[] = {
+ 0, 0, 0, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 1, 1, 1, 1, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 1, 1, 1, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 1, 5, 1, 1, 6,
+ 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 1, 8, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 1, 10, 1, 1,
+ 11, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 1, 13, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 1, 15, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16,
+ 1, 17, 1, 1, 18, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 1, 20,
+ 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 1, 22, 1, 23, 1, 1, 24,
+ 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 1, 26, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 1, 22, 1, 1,
+ 1, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 1, 28, 28, 28, 28,
+ 28, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 28, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 29, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 30, 1, 1, 31, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 32, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 33,
+ 1, 34, 34, 34, 34, 34, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 34, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 35, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 36, 1, 1, 0,
+ 0, 0, 0, 0, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3,
+ 1, 1, 1, 1, 1, 1, 1, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 1, 1, 1, 1, 1, 1, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 1, 28, 28, 28, 28, 28, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 28, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 29, 1, 1, 1,
+ 1, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 1, 1, 1, 30, 1,
+ 1, 31, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 32, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 33, 1, 38,
+ 38, 38, 38, 38, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 38, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 39, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 40, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 41, 1, 42, 42, 42, 42,
+ 42, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 42, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 43, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 44,
+ 1, 42, 42, 42, 42, 42, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 42, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 43, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 44, 1, 38, 38,
+ 38, 38, 38, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 38, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 39, 1, 1, 1, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 40, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 41, 1, 45, 45, 45, 45, 45,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 45, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 46, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 47, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 48,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 49, 1,
+ 50, 50, 50, 50, 50, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 50,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 51, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 52, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 53, 1, 50, 50, 50,
+ 50, 50, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 50, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 51,
+ 1, 1, 1, 1, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 52, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 53, 1, 45, 45, 45, 45, 45, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 45, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 46, 1, 1, 1,
+ 1, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 1, 1, 1, 1, 1,
+ 1, 47, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 48, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 49, 1, 28,
+ 28, 28, 28, 28, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 28, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 29, 1, 55, 55, 1, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 1, 1, 1, 30, 1, 1, 31, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 1, 1, 32, 1, 55, 1, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 1, 33, 1, 0
+};
+
+static const char _deserialize_text_trans_targs[] = {
+ 1, 0, 13, 17, 26, 3, 18, 21,
+ 18, 21, 5, 19, 20, 19, 20, 22,
+ 25, 8, 9, 12, 9, 12, 10, 11,
+ 23, 24, 23, 24, 14, 2, 6, 7,
+ 15, 16, 14, 15, 16, 17, 14, 4,
+ 15, 16, 14, 15, 16, 14, 2, 7,
+ 15, 16, 14, 2, 15, 16, 25, 26
+};
+
+static const char _deserialize_text_trans_actions[] = {
+ 0, 0, 1, 1, 1, 2, 2, 2,
+ 0, 0, 2, 2, 2, 0, 0, 2,
+ 2, 2, 2, 2, 0, 0, 3, 2,
+ 2, 2, 0, 0, 4, 5, 5, 5,
+ 4, 4, 0, 0, 0, 0, 6, 7,
+ 6, 6, 8, 8, 8, 9, 10, 10,
+ 9, 9, 11, 12, 11, 11, 0, 0
+};
+
+static const char _deserialize_text_eof_actions[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 0, 0,
+ 0, 4, 6, 8, 8, 6, 9, 11,
+ 11, 9, 4
+};
+
+static const int deserialize_text_start = 1;
+static const int deserialize_text_first_final = 13;
+static const int deserialize_text_error = 0;
+
+static const int deserialize_text_en_main = 1;
+
+
+#line 91 "../../src/hb-buffer-deserialize-text.rl"
+
+
+static hb_bool_t
+_hb_buffer_deserialize_glyphs_text (hb_buffer_t *buffer,
+ const char *buf,
+ unsigned int buf_len,
+ const char **end_ptr,
+ hb_font_t *font)
+{
+ const char *p = buf, *pe = buf + buf_len;
+
+ /* Ensure we have positions. */
+ (void) hb_buffer_get_glyph_positions (buffer, NULL);
+
+ while (p < pe && ISSPACE (*p))
+ p++;
+ if (p < pe && *p == (buffer->len ? '|' : '['))
+ {
+ *end_ptr = ++p;
+ }
+
+ const char *eof = pe, *tok = NULL;
+ int cs;
+ hb_glyph_info_t info;
+ hb_glyph_position_t pos;
+
+#line 343 "hb-buffer-deserialize-text.hh.tmp"
+ {
+ cs = deserialize_text_start;
+ }
+
+#line 348 "hb-buffer-deserialize-text.hh.tmp"
+ {
+ int _slen;
+ int _trans;
+ const unsigned char *_keys;
+ const char *_inds;
+ if ( p == pe )
+ goto _test_eof;
+ if ( cs == 0 )
+ goto _out;
+_resume:
+ _keys = _deserialize_text_trans_keys + (cs<<1);
+ _inds = _deserialize_text_indicies + _deserialize_text_index_offsets[cs];
+
+ _slen = _deserialize_text_key_spans[cs];
+ _trans = _inds[ _slen > 0 && _keys[0] <=(*p) &&
+ (*p) <= _keys[1] ?
+ (*p) - _keys[0] : _slen ];
+
+ cs = _deserialize_text_trans_targs[_trans];
+
+ if ( _deserialize_text_trans_actions[_trans] == 0 )
+ goto _again;
+
+ switch ( _deserialize_text_trans_actions[_trans] ) {
+ case 2:
+#line 51 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ tok = p;
+}
+ break;
+ case 5:
+#line 55 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
+ break;
+ case 10:
+#line 62 "../../src/hb-buffer-deserialize-text.rl"
+ { if (!parse_uint (tok, p, &info.cluster )) return false; }
+ break;
+ case 3:
+#line 63 "../../src/hb-buffer-deserialize-text.rl"
+ { if (!parse_int (tok, p, &pos.x_offset )) return false; }
+ break;
+ case 12:
+#line 64 "../../src/hb-buffer-deserialize-text.rl"
+ { if (!parse_int (tok, p, &pos.y_offset )) return false; }
+ break;
+ case 7:
+#line 65 "../../src/hb-buffer-deserialize-text.rl"
+ { if (!parse_int (tok, p, &pos.x_advance)) return false; }
+ break;
+ case 1:
+#line 38 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ memset (&info, 0, sizeof (info));
+ memset (&pos , 0, sizeof (pos ));
+}
+#line 51 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ tok = p;
+}
+ break;
+ case 4:
+#line 55 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 9:
+#line 62 "../../src/hb-buffer-deserialize-text.rl"
+ { if (!parse_uint (tok, p, &info.cluster )) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 11:
+#line 64 "../../src/hb-buffer-deserialize-text.rl"
+ { if (!parse_int (tok, p, &pos.y_offset )) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 6:
+#line 65 "../../src/hb-buffer-deserialize-text.rl"
+ { if (!parse_int (tok, p, &pos.x_advance)) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 8:
+#line 66 "../../src/hb-buffer-deserialize-text.rl"
+ { if (!parse_int (tok, p, &pos.y_advance)) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+#line 480 "hb-buffer-deserialize-text.hh.tmp"
+ }
+
+_again:
+ if ( cs == 0 )
+ goto _out;
+ if ( ++p != pe )
+ goto _resume;
+ _test_eof: {}
+ if ( p == eof )
+ {
+ switch ( _deserialize_text_eof_actions[cs] ) {
+ case 4:
+#line 55 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 9:
+#line 62 "../../src/hb-buffer-deserialize-text.rl"
+ { if (!parse_uint (tok, p, &info.cluster )) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 11:
+#line 64 "../../src/hb-buffer-deserialize-text.rl"
+ { if (!parse_int (tok, p, &pos.y_offset )) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 6:
+#line 65 "../../src/hb-buffer-deserialize-text.rl"
+ { if (!parse_int (tok, p, &pos.x_advance)) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 8:
+#line 66 "../../src/hb-buffer-deserialize-text.rl"
+ { if (!parse_int (tok, p, &pos.y_advance)) return false; }
+#line 43 "../../src/hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+#line 557 "hb-buffer-deserialize-text.hh.tmp"
+ }
+ }
+
+ _out: {}
+ }
+
+#line 119 "../../src/hb-buffer-deserialize-text.rl"
+
+
+ *end_ptr = p;
+
+ return p == pe && *(p-1) != ']';
+}
+
+#endif /* HB_BUFFER_DESERIALIZE_TEXT_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-text.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-text.rl
new file mode 100644
index 00000000000..8856580fbe3
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-deserialize-text.rl
@@ -0,0 +1,126 @@
+/*
+ * Copyright © 2013 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_BUFFER_DESERIALIZE_TEXT_HH
+#define HB_BUFFER_DESERIALIZE_TEXT_HH
+
+#include "hb-private.hh"
+
+%%{
+
+machine deserialize_text;
+alphtype unsigned char;
+write data;
+
+action clear_item {
+ memset (&info, 0, sizeof (info));
+ memset (&pos , 0, sizeof (pos ));
+}
+
+action add_item {
+ buffer->add_info (info);
+ if (buffer->in_error)
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+
+action tok {
+ tok = p;
+}
+
+action parse_glyph {
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
+
+action parse_cluster { if (!parse_uint (tok, p, &info.cluster )) return false; }
+action parse_x_offset { if (!parse_int (tok, p, &pos.x_offset )) return false; }
+action parse_y_offset { if (!parse_int (tok, p, &pos.y_offset )) return false; }
+action parse_x_advance { if (!parse_int (tok, p, &pos.x_advance)) return false; }
+action parse_y_advance { if (!parse_int (tok, p, &pos.y_advance)) return false; }
+
+unum = '0' | [1-9] digit*;
+num = '-'? unum;
+
+glyph_id = unum;
+glyph_name = alpha (alnum|'_'|'.'|'-')*;
+
+glyph = (glyph_id | glyph_name) >tok %parse_glyph;
+cluster = '=' (unum >tok %parse_cluster);
+offsets = '@' (num >tok %parse_x_offset) ',' (num >tok %parse_y_offset );
+advances= '+' (num >tok %parse_x_advance) (',' (num >tok %parse_y_advance))?;
+item =
+ (
+ glyph
+ cluster?
+ offsets?
+ advances?
+ )
+ >clear_item
+ %add_item
+ ;
+
+main := space* item (space* '|' space* item)* space* ('|'|']')?;
+
+}%%
+
+static hb_bool_t
+_hb_buffer_deserialize_glyphs_text (hb_buffer_t *buffer,
+ const char *buf,
+ unsigned int buf_len,
+ const char **end_ptr,
+ hb_font_t *font)
+{
+ const char *p = buf, *pe = buf + buf_len;
+
+ /* Ensure we have positions. */
+ (void) hb_buffer_get_glyph_positions (buffer, NULL);
+
+ while (p < pe && ISSPACE (*p))
+ p++;
+ if (p < pe && *p == (buffer->len ? '|' : '['))
+ {
+ *end_ptr = ++p;
+ }
+
+ const char *eof = pe, *tok = NULL;
+ int cs;
+ hb_glyph_info_t info;
+ hb_glyph_position_t pos;
+ %%{
+ write init;
+ write exec;
+ }%%
+
+ *end_ptr = p;
+
+ return p == pe && *(p-1) != ']';
+}
+
+#endif /* HB_BUFFER_DESERIALIZE_TEXT_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-buffer-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-private.hh
index 13cf4bb0e9b..387ebd9a84c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-buffer-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-private.hh
@@ -110,6 +110,7 @@ struct hb_buffer_t {
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);
@@ -128,7 +129,7 @@ struct hb_buffer_t {
HB_INTERNAL void replace_glyph (hb_codepoint_t glyph_index);
/* Makes a copy of the glyph at idx to output and replace glyph_index */
HB_INTERNAL void output_glyph (hb_codepoint_t glyph_index);
- HB_INTERNAL void output_info (hb_glyph_info_t &glyph_info);
+ HB_INTERNAL void output_info (const hb_glyph_info_t &glyph_info);
/* Copies glyph at idx to output but doesn't advance idx */
HB_INTERNAL void copy_glyph (void);
/* Copies glyph at idx to output and advance idx.
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-serialize.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-serialize.cc
new file mode 100644
index 00000000000..dc47ba73e08
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer-serialize.cc
@@ -0,0 +1,336 @@
+/*
+ * Copyright © 2012,2013 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-buffer-private.hh"
+
+
+static const char *serialize_formats[] = {
+ "text",
+ "json",
+ NULL
+};
+
+const char **
+hb_buffer_serialize_list_formats (void)
+{
+ return serialize_formats;
+}
+
+hb_buffer_serialize_format_t
+hb_buffer_serialize_format_from_string (const char *str, int len)
+{
+ /* Upper-case it. */
+ return (hb_buffer_serialize_format_t) (hb_tag_from_string (str, len) & ~0x20202020);
+}
+
+const char *
+hb_buffer_serialize_format_to_string (hb_buffer_serialize_format_t format)
+{
+ switch (format)
+ {
+ case HB_BUFFER_SERIALIZE_FORMAT_TEXT: return serialize_formats[0];
+ case HB_BUFFER_SERIALIZE_FORMAT_JSON: return serialize_formats[1];
+ default:
+ case HB_BUFFER_SERIALIZE_FORMAT_INVALID: return NULL;
+ }
+}
+
+static unsigned int
+_hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
+ unsigned int start,
+ unsigned int end,
+ char *buf,
+ unsigned int buf_size,
+ unsigned int *buf_consumed,
+ hb_font_t *font,
+ hb_buffer_serialize_flags_t flags)
+{
+ hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
+ hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, NULL);
+
+ *buf_consumed = 0;
+ for (unsigned int i = start; i < end; i++)
+ {
+ char b[1024];
+ char *p = b;
+
+ /* In the following code, we know b is large enough that no overflow can happen. */
+
+#define APPEND(s) HB_STMT_START { strcpy (p, s); p += strlen (s); } HB_STMT_END
+
+ if (i)
+ *p++ = ',';
+
+ *p++ = '{';
+
+ APPEND ("\"g\":");
+ if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES))
+ {
+ char g[128];
+ hb_font_glyph_to_string (font, info[i].codepoint, g, sizeof (g));
+ *p++ = '"';
+ for (char *q = g; *q; q++) {
+ if (*q == '"')
+ *p++ = '\\';
+ *p++ = *q;
+ }
+ *p++ = '"';
+ }
+ else
+ p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "%u", info[i].codepoint);
+
+ if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS)) {
+ p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"cl\":%u", info[i].cluster);
+ }
+
+ if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS))
+ {
+ p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"dx\":%d,\"dy\":%d",
+ pos[i].x_offset, pos[i].y_offset);
+ p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"ax\":%d,\"ay\":%d",
+ pos[i].x_advance, pos[i].y_advance);
+ }
+
+ *p++ = '}';
+
+ if (buf_size > (p - b))
+ {
+ unsigned int l = p - b;
+ memcpy (buf, b, l);
+ buf += l;
+ buf_size -= l;
+ *buf_consumed += l;
+ *buf = '\0';
+ } else
+ return i - start;
+ }
+
+ return end - start;
+}
+
+static unsigned int
+_hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
+ unsigned int start,
+ unsigned int end,
+ char *buf,
+ unsigned int buf_size,
+ unsigned int *buf_consumed,
+ hb_font_t *font,
+ hb_buffer_serialize_flags_t flags)
+{
+ hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
+ hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, NULL);
+
+ *buf_consumed = 0;
+ for (unsigned int i = start; i < end; i++)
+ {
+ char b[1024];
+ char *p = b;
+
+ /* In the following code, we know b is large enough that no overflow can happen. */
+
+ if (i)
+ *p++ = '|';
+
+ if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES))
+ {
+ hb_font_glyph_to_string (font, info[i].codepoint, p, 128);
+ p += strlen (p);
+ }
+ else
+ p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "%u", info[i].codepoint);
+
+ if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS)) {
+ p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "=%u", info[i].cluster);
+ }
+
+ if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS))
+ {
+ if (pos[i].x_offset || pos[i].y_offset)
+ p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "@%d,%d", pos[i].x_offset, pos[i].y_offset);
+
+ *p++ = '+';
+ p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "%d", pos[i].x_advance);
+ if (pos->y_advance)
+ p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",%d", pos[i].y_advance);
+ }
+
+ if (buf_size > (p - b))
+ {
+ unsigned int l = p - b;
+ memcpy (buf, b, l);
+ buf += l;
+ buf_size -= l;
+ *buf_consumed += l;
+ *buf = '\0';
+ } else
+ return i - start;
+ }
+
+ return end - start;
+}
+
+/* Returns number of items, starting at start, that were serialized. */
+unsigned int
+hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
+ unsigned int start,
+ unsigned int end,
+ char *buf,
+ unsigned int buf_size,
+ unsigned int *buf_consumed, /* May be NULL */
+ hb_font_t *font, /* May be NULL */
+ hb_buffer_serialize_format_t format,
+ hb_buffer_serialize_flags_t flags)
+{
+ assert (start <= end && end <= buffer->len);
+
+ unsigned int sconsumed;
+ if (!buf_consumed)
+ buf_consumed = &sconsumed;
+ *buf_consumed = 0;
+
+ assert ((!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID) ||
+ buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS);
+
+ if (unlikely (start == end))
+ return 0;
+
+ if (!font)
+ font = hb_font_get_empty ();
+
+ switch (format)
+ {
+ case HB_BUFFER_SERIALIZE_FORMAT_TEXT:
+ return _hb_buffer_serialize_glyphs_text (buffer, start, end,
+ buf, buf_size, buf_consumed,
+ font, flags);
+
+ case HB_BUFFER_SERIALIZE_FORMAT_JSON:
+ return _hb_buffer_serialize_glyphs_json (buffer, start, end,
+ buf, buf_size, buf_consumed,
+ font, flags);
+
+ default:
+ case HB_BUFFER_SERIALIZE_FORMAT_INVALID:
+ return 0;
+
+ }
+}
+
+
+static hb_bool_t
+parse_uint (const char *pp, const char *end, uint32_t *pv)
+{
+ char buf[32];
+ unsigned int len = MIN (ARRAY_LENGTH (buf) - 1, (unsigned int) (end - pp));
+ strncpy (buf, pp, len);
+ buf[len] = '\0';
+
+ char *p = buf;
+ char *pend = p;
+ uint32_t v;
+
+ errno = 0;
+ v = strtol (p, &pend, 10);
+ if (errno || p == pend || pend - p != end - pp)
+ return false;
+
+ *pv = v;
+ return true;
+}
+
+static hb_bool_t
+parse_int (const char *pp, const char *end, int32_t *pv)
+{
+ char buf[32];
+ unsigned int len = MIN (ARRAY_LENGTH (buf) - 1, (unsigned int) (end - pp));
+ strncpy (buf, pp, len);
+ buf[len] = '\0';
+
+ char *p = buf;
+ char *pend = p;
+ int32_t v;
+
+ errno = 0;
+ v = strtol (p, &pend, 10);
+ if (errno || p == pend || pend - p != end - pp)
+ return false;
+
+ *pv = v;
+ return true;
+}
+
+#include "hb-buffer-deserialize-json.hh"
+#include "hb-buffer-deserialize-text.hh"
+
+hb_bool_t
+hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
+ const char *buf,
+ int buf_len, /* -1 means nul-terminated */
+ const char **end_ptr, /* May be NULL */
+ hb_font_t *font, /* May be NULL */
+ hb_buffer_serialize_format_t format)
+{
+ const char *end;
+ if (!end_ptr)
+ end_ptr = &end;
+ *end_ptr = buf;
+
+ assert ((!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID) ||
+ buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS);
+
+ if (buf_len == -1)
+ buf_len = strlen (buf);
+
+ if (!buf_len)
+ {
+ *end_ptr = buf;
+ return false;
+ }
+
+ hb_buffer_set_content_type (buffer, HB_BUFFER_CONTENT_TYPE_GLYPHS);
+
+ if (!font)
+ font = hb_font_get_empty ();
+
+ switch (format)
+ {
+ case HB_BUFFER_SERIALIZE_FORMAT_TEXT:
+ return _hb_buffer_deserialize_glyphs_text (buffer,
+ buf, buf_len, end_ptr,
+ font);
+
+ case HB_BUFFER_SERIALIZE_FORMAT_JSON:
+ return _hb_buffer_deserialize_glyphs_json (buffer,
+ buf, buf_len, end_ptr,
+ font);
+
+ default:
+ case HB_BUFFER_SERIALIZE_FORMAT_INVALID:
+ return false;
+
+ }
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-buffer.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer.cc
index c7860e9bc30..4e26250c963 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-buffer.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer.cc
@@ -215,6 +215,17 @@ hb_buffer_t::add (hb_codepoint_t codepoint,
}
void
+hb_buffer_t::add_info (const hb_glyph_info_t &glyph_info)
+{
+ if (unlikely (!ensure (len + 1))) return;
+
+ info[len] = glyph_info;
+
+ len++;
+}
+
+
+void
hb_buffer_t::remove_output (void)
{
if (unlikely (hb_object_is_inert (this)))
@@ -315,7 +326,7 @@ hb_buffer_t::output_glyph (hb_codepoint_t glyph_index)
}
void
-hb_buffer_t::output_info (hb_glyph_info_t &glyph_info)
+hb_buffer_t::output_info (const hb_glyph_info_t &glyph_info)
{
if (unlikely (!make_room_for (0, 1))) return;
@@ -1064,231 +1075,3 @@ hb_buffer_normalize_glyphs (hb_buffer_t *buffer)
}
normalize_glyphs_cluster (buffer, start, end, backward);
}
-
-
-/*
- * Serialize
- */
-
-static const char *serialize_formats[] = {
- "text",
- "json",
- NULL
-};
-
-const char **
-hb_buffer_serialize_list_formats (void)
-{
- return serialize_formats;
-}
-
-hb_buffer_serialize_format_t
-hb_buffer_serialize_format_from_string (const char *str, int len)
-{
- /* Upper-case it. */
- return (hb_buffer_serialize_format_t) (hb_tag_from_string (str, len) & ~0x20202020);
-}
-
-const char *
-hb_buffer_serialize_format_to_string (hb_buffer_serialize_format_t format)
-{
- switch (format)
- {
- case HB_BUFFER_SERIALIZE_FORMAT_TEXT: return serialize_formats[0];
- case HB_BUFFER_SERIALIZE_FORMAT_JSON: return serialize_formats[1];
- default:
- case HB_BUFFER_SERIALIZE_FORMAT_INVALID: return NULL;
- }
-}
-
-static unsigned int
-_hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
- unsigned int start,
- unsigned int end,
- char *buf,
- unsigned int buf_size,
- unsigned int *buf_consumed,
- hb_font_t *font,
- hb_buffer_serialize_flags_t flags)
-{
- hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
- hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, NULL);
-
- *buf_consumed = 0;
- for (unsigned int i = start; i < end; i++)
- {
- char b[1024];
- char *p = b;
-
- /* In the following code, we know b is large enough that no overflow can happen. */
-
-#define APPEND(s) HB_STMT_START { strcpy (p, s); p += strlen (s); } HB_STMT_END
-
- if (i)
- *p++ = ',';
-
- *p++ = '{';
-
- APPEND ("\"g\":");
- if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES))
- {
- char g[128];
- hb_font_glyph_to_string (font, info[i].codepoint, g, sizeof (g));
- *p++ = '"';
- for (char *q = g; *q; q++) {
- if (*q == '"')
- *p++ = '\\';
- *p++ = *q;
- }
- *p++ = '"';
- }
- else
- p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "%u", info[i].codepoint);
-
- if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS)) {
- p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"cl\":%u", info[i].cluster);
- }
-
- if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS))
- {
- p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"dx\":%d,\"dy\":%d",
- pos[i].x_offset, pos[i].y_offset);
- p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"ax\":%d,\"ay\":%d",
- pos[i].x_advance, pos[i].y_advance);
- }
-
- *p++ = '}';
-
- if (buf_size > (p - b))
- {
- unsigned int l = p - b;
- memcpy (buf, b, l);
- buf += l;
- buf_size -= l;
- *buf_consumed += l;
- *buf = '\0';
- } else
- return i - start;
- }
-
- return end - start;
-}
-
-static unsigned int
-_hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
- unsigned int start,
- unsigned int end,
- char *buf,
- unsigned int buf_size,
- unsigned int *buf_consumed,
- hb_font_t *font,
- hb_buffer_serialize_flags_t flags)
-{
- hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
- hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, NULL);
- hb_direction_t direction = hb_buffer_get_direction (buffer);
-
- *buf_consumed = 0;
- for (unsigned int i = start; i < end; i++)
- {
- char b[1024];
- char *p = b;
-
- /* In the following code, we know b is large enough that no overflow can happen. */
-
- if (i)
- *p++ = '|';
-
- if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES))
- {
- hb_font_glyph_to_string (font, info[i].codepoint, p, 128);
- p += strlen (p);
- }
- else
- p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "%u", info[i].codepoint);
-
- if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS)) {
- p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "=%u", info[i].cluster);
- }
-
- if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS))
- {
- if (pos[i].x_offset || pos[i].y_offset)
- p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "@%d,%d", pos[i].x_offset, pos[i].y_offset);
-
- *p++ = '+';
- if (HB_DIRECTION_IS_HORIZONTAL (direction) || pos[i].x_advance)
- p += snprintf (p, ARRAY_LENGTH (b) - (p - b), "%d", pos[i].x_advance);
- if (HB_DIRECTION_IS_VERTICAL (direction) || pos->y_advance)
- p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",%d", pos[i].y_advance);
- }
-
- if (buf_size > (p - b))
- {
- unsigned int l = p - b;
- memcpy (buf, b, l);
- buf += l;
- buf_size -= l;
- *buf_consumed += l;
- *buf = '\0';
- } else
- return i - start;
- }
-
- return end - start;
-}
-
-/* Returns number of items, starting at start, that were serialized. */
-unsigned int
-hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
- unsigned int start,
- unsigned int end,
- char *buf,
- unsigned int buf_size,
- unsigned int *buf_consumed,
- hb_font_t *font, /* May be NULL */
- hb_buffer_serialize_format_t format,
- hb_buffer_serialize_flags_t flags)
-{
- assert (start <= end && end <= buffer->len);
-
- *buf_consumed = 0;
-
- assert ((!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID) ||
- buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS);
-
- if (unlikely (start == end))
- return 0;
-
- if (!font)
- font = hb_font_get_empty ();
-
- switch (format)
- {
- case HB_BUFFER_SERIALIZE_FORMAT_TEXT:
- return _hb_buffer_serialize_glyphs_text (buffer, start, end,
- buf, buf_size, buf_consumed,
- font, flags);
-
- case HB_BUFFER_SERIALIZE_FORMAT_JSON:
- return _hb_buffer_serialize_glyphs_json (buffer, start, end,
- buf, buf_size, buf_consumed,
- font, flags);
-
- default:
- case HB_BUFFER_SERIALIZE_FORMAT_INVALID:
- return 0;
-
- }
-}
-
-hb_bool_t
-hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
- const char *buf,
- unsigned int buf_len,
- unsigned int *buf_consumed,
- hb_font_t *font, /* May be NULL */
- hb_buffer_serialize_format_t format)
-{
- return false;
-}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-buffer.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer.h
index 5386e360add..55a40457193 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-buffer.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-buffer.h
@@ -304,7 +304,7 @@ hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
unsigned int end,
char *buf,
unsigned int buf_size,
- unsigned int *buf_consumed,
+ unsigned int *buf_consumed, /* May be NULL */
hb_font_t *font, /* May be NULL */
hb_buffer_serialize_format_t format,
hb_buffer_serialize_flags_t flags);
@@ -312,8 +312,8 @@ hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
hb_bool_t
hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
const char *buf,
- unsigned int buf_len,
- unsigned int *buf_consumed,
+ int buf_len, /* -1 means nul-terminated */
+ const char **end_ptr, /* May be NULL */
hb_font_t *font, /* May be NULL */
hb_buffer_serialize_format_t format);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-cache-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-cache-private.hh
index 19b70b7e395..19b70b7e395 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-cache-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-cache-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-common.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-common.cc
index 540d252cd73..540d252cd73 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-common.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-common.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-common.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-common.h
index cc221d33be9..cc221d33be9 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-common.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-common.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-coretext.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-coretext.cc
index 8f94795928c..8f94795928c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-coretext.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-coretext.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-coretext.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-coretext.h
index c4954fa1b2c..c4954fa1b2c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-coretext.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-coretext.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-fallback-shape.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-fallback-shape.cc
index 1a1fcfbda1e..1a1fcfbda1e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-fallback-shape.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-fallback-shape.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-font-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-font-private.hh
index 48fbb0ee549..48fbb0ee549 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-font-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-font-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-font.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-font.cc
index b59fdebaea7..b59fdebaea7 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-font.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-font.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-font.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-font.h
index 88d489551e8..88d489551e8 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-font.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-font.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ft.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ft.cc
index 1e87c1cb324..978230cd655 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ft.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ft.cc
@@ -53,14 +53,7 @@
*
* - We don't handle / allow for emboldening / obliqueing.
*
- * - Rounding, etc?
- *
- * - In the future, we should add constructors to create fonts in font space.
- *
- * - I believe transforms are not correctly implemented. FreeType does not
- * provide any API to get to the transform/delta set on the face. :(
- *
- * - Always use FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH?
+ * - In the future, we should add constructors to create fonts in font space?
*
* - FT_Load_Glyph() is exteremely costly. Do something about it?
*/
@@ -242,8 +235,8 @@ hb_ft_get_glyph_name (hb_font_t *font HB_UNUSED,
FT_Face ft_face = (FT_Face) font_data;
hb_bool_t ret = !FT_Get_Glyph_Name (ft_face, glyph, name, size);
- if (!ret || (size && !*name))
- snprintf (name, size, "gid%u", glyph);
+ if (ret && (size && !*name))
+ ret = false;
return ret;
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ft.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ft.h
index 696251e143f..696251e143f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ft.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ft.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-glib.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-glib.cc
index 676e6601628..676e6601628 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-glib.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-glib.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-glib.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-glib.h
index 63a9d3366c5..63a9d3366c5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-glib.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-glib.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-gobject-enums.cc.tmpl b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-gobject-enums.cc.tmpl
index 05abd898d4f..05abd898d4f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-gobject-enums.cc.tmpl
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-gobject-enums.cc.tmpl
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-gobject-structs.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-gobject-structs.cc
index cec48542275..cec48542275 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-gobject-structs.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-gobject-structs.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-gobject.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-gobject.h
index 4f23fdd385d..4f23fdd385d 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-gobject.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-gobject.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-graphite2.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-graphite2.cc
index 16ef9a4dabe..16ef9a4dabe 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-graphite2.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-graphite2.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-graphite2.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-graphite2.h
index bea68f939b4..bea68f939b4 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-graphite2.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-graphite2.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-icu-le.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-icu-le.cc
index c05d330b957..c05d330b957 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-icu-le.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-icu-le.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-icu.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-icu.cc
index c177be2c4b2..c177be2c4b2 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-icu.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-icu.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-icu.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-icu.h
index f2f35f0f2ce..f2f35f0f2ce 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-icu.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-icu.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-mutex-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-mutex-private.hh
index 0fb21c2e86e..0fb21c2e86e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-mutex-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-mutex-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-object-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-object-private.hh
index 8a9ae34dbee..8a9ae34dbee 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-object-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-object-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-old.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-old.cc
index a7ea8ed9bbe..a7ea8ed9bbe 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-old.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-old.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-open-file-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-open-file-private.hh
index 250504ae20b..250504ae20b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-open-file-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-open-file-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-open-type-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-open-type-private.hh
index 090f3fc4786..cd1163e4f78 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-open-type-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-open-type-private.hh
@@ -171,6 +171,10 @@ ASSERT_STATIC (Type::min_size + 1 <= sizeof (_Null##Type))
(&c->debug_depth, c->get_name (), this, HB_FUNC, \
"");
+/* This limits sanitizing time on really broken fonts. */
+#ifndef HB_SANITIZE_MAX_EDITS
+#define HB_SANITIZE_MAX_EDITS 100
+#endif
struct hb_sanitize_context_t
{
@@ -178,7 +182,7 @@ struct hb_sanitize_context_t
static const unsigned int max_debug_depth = HB_DEBUG_SANITIZE;
typedef bool return_t;
template <typename T>
- inline return_t process (const T &obj) { return obj.sanitize (this); }
+ inline return_t dispatch (const T &obj) { return obj.sanitize (this); }
static return_t default_return_value (void) { return true; }
bool stop_sublookup_iteration (const return_t r HB_UNUSED) const { return false; }
@@ -247,6 +251,9 @@ struct hb_sanitize_context_t
inline bool may_edit (const void *base HB_UNUSED, unsigned int len HB_UNUSED)
{
+ if (this->edit_count >= HB_SANITIZE_MAX_EDITS)
+ return false;
+
const char *p = (const char *) base;
this->edit_count++;
@@ -404,7 +411,7 @@ struct hb_serialize_context_t
template <typename Type>
inline Type *allocate_size (unsigned int size)
{
- if (unlikely (this->ran_out_of_room || this->end - this->head < size)) {
+ if (unlikely (this->ran_out_of_room || this->end - this->head < ptrdiff_t (size))) {
this->ran_out_of_room = true;
return NULL;
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-head-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-head-table.hh
index 3a9451295de..3a9451295de 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-head-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-head-table.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-hhea-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-hhea-table.hh
index 2b89c4e0208..2b89c4e0208 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-hhea-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-hhea-table.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-hmtx-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-hmtx-table.hh
index b94337d0be7..b94337d0be7 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-hmtx-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-hmtx-table.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-common-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-common-private.hh
index e6018db1243..e6018db1243 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-common-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-common-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-gdef-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-gdef-table.hh
index ff2d09c51f0..ff2d09c51f0 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-gdef-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-gdef-table.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-gpos-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-gpos-table.hh
index 44f1c641d16..44139277c68 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-gpos-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-gpos-table.hh
@@ -519,12 +519,12 @@ struct SinglePosFormat2
struct SinglePos
{
template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
+ inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_PROCESS (this);
+ TRACE_DISPATCH (this);
switch (u.format) {
- case 1: return TRACE_RETURN (c->process (u.format1));
- case 2: return TRACE_RETURN (c->process (u.format2));
+ case 1: return TRACE_RETURN (c->dispatch (u.format1));
+ case 2: return TRACE_RETURN (c->dispatch (u.format2));
default:return TRACE_RETURN (c->default_return_value ());
}
}
@@ -810,12 +810,12 @@ struct PairPosFormat2
struct PairPos
{
template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
+ inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_PROCESS (this);
+ TRACE_DISPATCH (this);
switch (u.format) {
- case 1: return TRACE_RETURN (c->process (u.format1));
- case 2: return TRACE_RETURN (c->process (u.format2));
+ case 1: return TRACE_RETURN (c->dispatch (u.format1));
+ case 2: return TRACE_RETURN (c->dispatch (u.format2));
default:return TRACE_RETURN (c->default_return_value ());
}
}
@@ -976,11 +976,11 @@ struct CursivePosFormat1
struct CursivePos
{
template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
+ inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_PROCESS (this);
+ TRACE_DISPATCH (this);
switch (u.format) {
- case 1: return TRACE_RETURN (c->process (u.format1));
+ case 1: return TRACE_RETURN (c->dispatch (u.format1));
default:return TRACE_RETURN (c->default_return_value ());
}
}
@@ -1075,11 +1075,11 @@ struct MarkBasePosFormat1
struct MarkBasePos
{
template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
+ inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_PROCESS (this);
+ TRACE_DISPATCH (this);
switch (u.format) {
- case 1: return TRACE_RETURN (c->process (u.format1));
+ case 1: return TRACE_RETURN (c->dispatch (u.format1));
default:return TRACE_RETURN (c->default_return_value ());
}
}
@@ -1196,11 +1196,11 @@ struct MarkLigPosFormat1
struct MarkLigPos
{
template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
+ inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_PROCESS (this);
+ TRACE_DISPATCH (this);
switch (u.format) {
- case 1: return TRACE_RETURN (c->process (u.format1));
+ case 1: return TRACE_RETURN (c->dispatch (u.format1));
default:return TRACE_RETURN (c->default_return_value ());
}
}
@@ -1315,11 +1315,11 @@ struct MarkMarkPosFormat1
struct MarkMarkPos
{
template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
+ inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_PROCESS (this);
+ TRACE_DISPATCH (this);
switch (u.format) {
- case 1: return TRACE_RETURN (c->process (u.format1));
+ case 1: return TRACE_RETURN (c->dispatch (u.format1));
default:return TRACE_RETURN (c->default_return_value ());
}
}
@@ -1374,19 +1374,19 @@ struct PosLookupSubTable
};
template <typename context_t>
- inline typename context_t::return_t process (context_t *c, unsigned int lookup_type) const
+ inline typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
{
- TRACE_PROCESS (this);
+ TRACE_DISPATCH (this);
switch (lookup_type) {
- case Single: return TRACE_RETURN (u.single.process (c));
- case Pair: return TRACE_RETURN (u.pair.process (c));
- case Cursive: return TRACE_RETURN (u.cursive.process (c));
- case MarkBase: return TRACE_RETURN (u.markBase.process (c));
- case MarkLig: return TRACE_RETURN (u.markLig.process (c));
- case MarkMark: return TRACE_RETURN (u.markMark.process (c));
- case Context: return TRACE_RETURN (u.context.process (c));
- case ChainContext: return TRACE_RETURN (u.chainContext.process (c));
- case Extension: return TRACE_RETURN (u.extension.process (c));
+ case Single: return TRACE_RETURN (u.single.dispatch (c));
+ case Pair: return TRACE_RETURN (u.pair.dispatch (c));
+ case Cursive: return TRACE_RETURN (u.cursive.dispatch (c));
+ case MarkBase: return TRACE_RETURN (u.markBase.dispatch (c));
+ case MarkLig: return TRACE_RETURN (u.markLig.dispatch (c));
+ case MarkMark: return TRACE_RETURN (u.markMark.dispatch (c));
+ case Context: return TRACE_RETURN (u.context.dispatch (c));
+ case ChainContext: return TRACE_RETURN (u.chainContext.dispatch (c));
+ case Extension: return TRACE_RETURN (u.extension.dispatch (c));
default: return TRACE_RETURN (c->default_return_value ());
}
}
@@ -1434,27 +1434,11 @@ struct PosLookup : Lookup
inline const PosLookupSubTable& get_subtable (unsigned int i) const
{ return this+CastR<OffsetArrayOf<PosLookupSubTable> > (subTable)[i]; }
- template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
- {
- TRACE_PROCESS (this);
- unsigned int lookup_type = get_type ();
- unsigned int count = get_subtable_count ();
- for (unsigned int i = 0; i < count; i++) {
- typename context_t::return_t r = get_subtable (i).process (c, lookup_type);
- if (c->stop_sublookup_iteration (r))
- return TRACE_RETURN (r);
- }
- return TRACE_RETURN (c->default_return_value ());
- }
- template <typename context_t>
- static inline typename context_t::return_t process_recurse_func (context_t *c, unsigned int lookup_index);
-
inline hb_collect_glyphs_context_t::return_t collect_glyphs_lookup (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
c->set_recurse_func (NULL);
- return TRACE_RETURN (process (c));
+ return TRACE_RETURN (dispatch (c));
}
template <typename set_t>
@@ -1464,7 +1448,7 @@ struct PosLookup : Lookup
const Coverage *last = NULL;
unsigned int count = get_subtable_count ();
for (unsigned int i = 0; i < count; i++) {
- const Coverage *coverage = &get_subtable (i).process (&c, get_type ());
+ const Coverage *coverage = &get_subtable (i).dispatch (&c, get_type ());
if (coverage != last) {
coverage->add_coverage (glyphs);
last = coverage;
@@ -1477,7 +1461,7 @@ struct PosLookup : Lookup
TRACE_APPLY (this);
if (!c->check_glyph_property (&c->buffer->cur(), c->lookup_props))
return TRACE_RETURN (false);
- return TRACE_RETURN (process (c));
+ return TRACE_RETURN (dispatch (c));
}
static bool apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index);
@@ -1507,6 +1491,23 @@ struct PosLookup : Lookup
return ret;
}
+ template <typename context_t>
+ static inline 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
+ {
+ TRACE_DISPATCH (this);
+ unsigned int lookup_type = get_type ();
+ unsigned int count = get_subtable_count ();
+ for (unsigned int i = 0; i < count; i++) {
+ typename context_t::return_t r = get_subtable (i).dispatch (c, lookup_type);
+ if (c->stop_sublookup_iteration (r))
+ return TRACE_RETURN (r);
+ }
+ return TRACE_RETURN (c->default_return_value ());
+ }
+
inline bool sanitize (hb_sanitize_context_t *c) {
TRACE_SANITIZE (this);
if (unlikely (!Lookup::sanitize (c))) return TRACE_RETURN (false);
@@ -1618,11 +1619,11 @@ GPOS::position_finish (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
/* Out-of-class implementation for methods recursing */
template <typename context_t>
-inline typename context_t::return_t PosLookup::process_recurse_func (context_t *c, unsigned int lookup_index)
+inline typename context_t::return_t PosLookup::dispatch_recurse_func (context_t *c, unsigned int lookup_index)
{
const GPOS &gpos = *(hb_ot_layout_from_face (c->face)->gpos);
const PosLookup &l = gpos.get_lookup (lookup_index);
- return l.process (c);
+ return l.dispatch (c);
}
inline bool PosLookup::apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-gsub-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-gsub-table.hh
index 065d0f17f70..35d07298d30 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-gsub-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-gsub-table.hh
@@ -192,17 +192,6 @@ struct SingleSubstFormat2
struct SingleSubst
{
- template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
- {
- TRACE_PROCESS (this);
- switch (u.format) {
- case 1: return TRACE_RETURN (c->process (u.format1));
- case 2: return TRACE_RETURN (c->process (u.format2));
- default:return TRACE_RETURN (c->default_return_value ());
- }
- }
-
inline bool serialize (hb_serialize_context_t *c,
Supplier<GlyphID> &glyphs,
Supplier<GlyphID> &substitutes,
@@ -230,6 +219,17 @@ struct SingleSubst
}
}
+ template <typename context_t>
+ inline typename context_t::return_t dispatch (context_t *c) const
+ {
+ TRACE_DISPATCH (this);
+ switch (u.format) {
+ case 1: return TRACE_RETURN (c->dispatch (u.format1));
+ case 2: return TRACE_RETURN (c->dispatch (u.format2));
+ default:return TRACE_RETURN (c->default_return_value ());
+ }
+ }
+
inline bool sanitize (hb_sanitize_context_t *c) {
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return TRACE_RETURN (false);
@@ -385,16 +385,6 @@ struct MultipleSubstFormat1
struct MultipleSubst
{
- template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
- {
- TRACE_PROCESS (this);
- switch (u.format) {
- case 1: return TRACE_RETURN (c->process (u.format1));
- default:return TRACE_RETURN (c->default_return_value ());
- }
- }
-
inline bool serialize (hb_serialize_context_t *c,
Supplier<GlyphID> &glyphs,
Supplier<unsigned int> &substitute_len_list,
@@ -411,6 +401,16 @@ struct MultipleSubst
}
}
+ template <typename context_t>
+ inline typename context_t::return_t dispatch (context_t *c) const
+ {
+ TRACE_DISPATCH (this);
+ switch (u.format) {
+ case 1: return TRACE_RETURN (c->dispatch (u.format1));
+ default:return TRACE_RETURN (c->default_return_value ());
+ }
+ }
+
inline bool sanitize (hb_sanitize_context_t *c) {
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return TRACE_RETURN (false);
@@ -536,16 +536,6 @@ struct AlternateSubstFormat1
struct AlternateSubst
{
- template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
- {
- TRACE_PROCESS (this);
- switch (u.format) {
- case 1: return TRACE_RETURN (c->process (u.format1));
- default:return TRACE_RETURN (c->default_return_value ());
- }
- }
-
inline bool serialize (hb_serialize_context_t *c,
Supplier<GlyphID> &glyphs,
Supplier<unsigned int> &alternate_len_list,
@@ -562,6 +552,16 @@ struct AlternateSubst
}
}
+ template <typename context_t>
+ inline typename context_t::return_t dispatch (context_t *c) const
+ {
+ TRACE_DISPATCH (this);
+ switch (u.format) {
+ case 1: return TRACE_RETURN (c->dispatch (u.format1));
+ default:return TRACE_RETURN (c->default_return_value ());
+ }
+ }
+
inline bool sanitize (hb_sanitize_context_t *c) {
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return TRACE_RETURN (false);
@@ -841,16 +841,6 @@ struct LigatureSubstFormat1
struct LigatureSubst
{
- template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
- {
- TRACE_PROCESS (this);
- switch (u.format) {
- case 1: return TRACE_RETURN (c->process (u.format1));
- default:return TRACE_RETURN (c->default_return_value ());
- }
- }
-
inline bool serialize (hb_serialize_context_t *c,
Supplier<GlyphID> &first_glyphs,
Supplier<unsigned int> &ligature_per_first_glyph_count_list,
@@ -870,6 +860,16 @@ struct LigatureSubst
}
}
+ template <typename context_t>
+ inline typename context_t::return_t dispatch (context_t *c) const
+ {
+ TRACE_DISPATCH (this);
+ switch (u.format) {
+ case 1: return TRACE_RETURN (c->dispatch (u.format1));
+ default:return TRACE_RETURN (c->default_return_value ());
+ }
+ }
+
inline bool sanitize (hb_sanitize_context_t *c) {
TRACE_SANITIZE (this);
if (!u.format.sanitize (c)) return TRACE_RETURN (false);
@@ -1023,11 +1023,11 @@ struct ReverseChainSingleSubstFormat1
struct ReverseChainSingleSubst
{
template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
+ inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_PROCESS (this);
+ TRACE_DISPATCH (this);
switch (u.format) {
- case 1: return TRACE_RETURN (c->process (u.format1));
+ case 1: return TRACE_RETURN (c->dispatch (u.format1));
default:return TRACE_RETURN (c->default_return_value ());
}
}
@@ -1070,18 +1070,18 @@ struct SubstLookupSubTable
};
template <typename context_t>
- inline typename context_t::return_t process (context_t *c, unsigned int lookup_type) const
+ inline typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type) const
{
- TRACE_PROCESS (this);
+ TRACE_DISPATCH (this);
switch (lookup_type) {
- case Single: return TRACE_RETURN (u.single.process (c));
- case Multiple: return TRACE_RETURN (u.multiple.process (c));
- case Alternate: return TRACE_RETURN (u.alternate.process (c));
- case Ligature: return TRACE_RETURN (u.ligature.process (c));
- case Context: return TRACE_RETURN (u.context.process (c));
- case ChainContext: return TRACE_RETURN (u.chainContext.process (c));
- case Extension: return TRACE_RETURN (u.extension.process (c));
- case ReverseChainSingle: return TRACE_RETURN (u.reverseChainContextSingle.process (c));
+ case Single: return TRACE_RETURN (u.single.dispatch (c));
+ case Multiple: return TRACE_RETURN (u.multiple.dispatch (c));
+ case Alternate: return TRACE_RETURN (u.alternate.dispatch (c));
+ case Ligature: return TRACE_RETURN (u.ligature.dispatch (c));
+ case Context: return TRACE_RETURN (u.context.dispatch (c));
+ case ChainContext: return TRACE_RETURN (u.chainContext.dispatch (c));
+ case Extension: return TRACE_RETURN (u.extension.dispatch (c));
+ case ReverseChainSingle: return TRACE_RETURN (u.reverseChainContextSingle.dispatch (c));
default: return TRACE_RETURN (c->default_return_value ());
}
}
@@ -1138,34 +1138,18 @@ struct SubstLookup : Lookup
return lookup_type_is_reverse (type);
}
- template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
- {
- TRACE_PROCESS (this);
- unsigned int lookup_type = get_type ();
- unsigned int count = get_subtable_count ();
- for (unsigned int i = 0; i < count; i++) {
- typename context_t::return_t r = get_subtable (i).process (c, lookup_type);
- if (c->stop_sublookup_iteration (r))
- return TRACE_RETURN (r);
- }
- return TRACE_RETURN (c->default_return_value ());
- }
- template <typename context_t>
- static inline typename context_t::return_t process_recurse_func (context_t *c, unsigned int lookup_index);
-
inline hb_closure_context_t::return_t closure (hb_closure_context_t *c) const
{
TRACE_CLOSURE (this);
- c->set_recurse_func (process_recurse_func<hb_closure_context_t>);
- return TRACE_RETURN (process (c));
+ c->set_recurse_func (dispatch_recurse_func<hb_closure_context_t>);
+ return TRACE_RETURN (dispatch (c));
}
inline hb_collect_glyphs_context_t::return_t collect_glyphs_lookup (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
- c->set_recurse_func (process_recurse_func<hb_collect_glyphs_context_t>);
- return TRACE_RETURN (process (c));
+ c->set_recurse_func (dispatch_recurse_func<hb_collect_glyphs_context_t>);
+ return TRACE_RETURN (dispatch (c));
}
template <typename set_t>
@@ -1175,7 +1159,7 @@ struct SubstLookup : Lookup
const Coverage *last = NULL;
unsigned int count = get_subtable_count ();
for (unsigned int i = 0; i < count; i++) {
- const Coverage *coverage = &get_subtable (i).process (&c, get_type ());
+ const Coverage *coverage = &get_subtable (i).dispatch (&c, get_type ());
if (coverage != last) {
coverage->add_coverage (glyphs);
last = coverage;
@@ -1188,7 +1172,7 @@ struct SubstLookup : Lookup
TRACE_WOULD_APPLY (this);
if (unlikely (!c->len)) return TRACE_RETURN (false);
if (!digest->may_have (c->glyphs[0])) return TRACE_RETURN (false);
- return TRACE_RETURN (process (c));
+ return TRACE_RETURN (dispatch (c));
}
inline bool apply_once (hb_apply_context_t *c) const
@@ -1196,7 +1180,7 @@ struct SubstLookup : Lookup
TRACE_APPLY (this);
if (!c->check_glyph_property (&c->buffer->cur(), c->lookup_props))
return TRACE_RETURN (false);
- return TRACE_RETURN (process (c));
+ return TRACE_RETURN (dispatch (c));
}
static bool apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index);
@@ -1305,6 +1289,23 @@ struct SubstLookup : Lookup
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);
+
+ template <typename context_t>
+ inline typename context_t::return_t dispatch (context_t *c) const
+ {
+ TRACE_DISPATCH (this);
+ unsigned int lookup_type = get_type ();
+ unsigned int count = get_subtable_count ();
+ for (unsigned int i = 0; i < count; i++) {
+ typename context_t::return_t r = get_subtable (i).dispatch (c, lookup_type);
+ if (c->stop_sublookup_iteration (r))
+ return TRACE_RETURN (r);
+ }
+ return TRACE_RETURN (c->default_return_value ());
+ }
+
inline bool sanitize (hb_sanitize_context_t *c)
{
TRACE_SANITIZE (this);
@@ -1386,11 +1387,11 @@ inline bool ExtensionSubst::is_reverse (void) const
}
template <typename context_t>
-inline typename context_t::return_t SubstLookup::process_recurse_func (context_t *c, unsigned int lookup_index)
+inline typename context_t::return_t SubstLookup::dispatch_recurse_func (context_t *c, unsigned int lookup_index)
{
const GSUB &gsub = *(hb_ot_layout_from_face (c->face)->gsub);
const SubstLookup &l = gsub.get_lookup (lookup_index);
- return l.process (c);
+ return l.dispatch (c);
}
inline bool SubstLookup::apply_recurse_func (hb_apply_context_t *c, unsigned int lookup_index)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-gsubgpos-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-gsubgpos-private.hh
index 23fbdf48932..f46b3782ec7 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-gsubgpos-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-gsubgpos-private.hh
@@ -38,7 +38,7 @@ namespace OT {
-#define TRACE_PROCESS(this) \
+#define TRACE_DISPATCH(this) \
hb_auto_trace_t<context_t::max_debug_depth, typename context_t::return_t> trace \
(&c->debug_depth, c->get_name (), this, HB_FUNC, \
"");
@@ -60,7 +60,7 @@ struct hb_closure_context_t
typedef hb_void_t return_t;
typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned int lookup_index);
template <typename T>
- inline return_t process (const T &obj) { obj.closure (this); return HB_VOID; }
+ 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 recurse (unsigned int lookup_index)
@@ -109,7 +109,7 @@ struct hb_would_apply_context_t
static const unsigned int max_debug_depth = HB_DEBUG_WOULD_APPLY;
typedef bool return_t;
template <typename T>
- inline return_t process (const T &obj) { return obj.would_apply (this); }
+ inline return_t dispatch (const T &obj) { return obj.would_apply (this); }
static return_t default_return_value (void) { return false; }
bool stop_sublookup_iteration (return_t r) const { return r; }
@@ -148,7 +148,7 @@ struct hb_collect_glyphs_context_t
typedef hb_void_t return_t;
typedef return_t (*recurse_func_t) (hb_collect_glyphs_context_t *c, unsigned int lookup_index);
template <typename T>
- inline return_t process (const T &obj) { obj.collect_glyphs (this); return HB_VOID; }
+ 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 recurse (unsigned int lookup_index)
@@ -214,7 +214,7 @@ struct hb_get_coverage_context_t
static const unsigned int max_debug_depth = 0;
typedef const Coverage &return_t;
template <typename T>
- inline return_t process (const T &obj) { return obj.get_coverage (); }
+ inline return_t dispatch (const T &obj) { return obj.get_coverage (); }
static return_t default_return_value (void) { return Null(Coverage); }
hb_get_coverage_context_t (void) :
@@ -241,7 +241,7 @@ struct hb_apply_context_t
typedef bool return_t;
typedef return_t (*recurse_func_t) (hb_apply_context_t *c, unsigned int lookup_index);
template <typename T>
- inline return_t process (const T &obj) { return obj.apply (this); }
+ inline return_t dispatch (const T &obj) { return obj.apply (this); }
static return_t default_return_value (void) { return false; }
bool stop_sublookup_iteration (return_t r) const { return r; }
return_t recurse (unsigned int lookup_index)
@@ -261,7 +261,7 @@ struct hb_apply_context_t
hb_buffer_t *buffer;
hb_direction_t direction;
hb_mask_t lookup_mask;
- bool auto_joiners;
+ bool auto_zwj;
recurse_func_t recurse_func;
unsigned int nesting_level_left;
unsigned int lookup_props;
@@ -274,12 +274,12 @@ struct hb_apply_context_t
hb_font_t *font_,
hb_buffer_t *buffer_,
hb_mask_t lookup_mask_,
- bool auto_joiners_) :
+ bool auto_zwj_) :
table_index (table_index_),
font (font_), face (font->face), buffer (buffer_),
direction (buffer_->props.direction),
lookup_mask (lookup_mask_),
- auto_joiners (auto_joiners_),
+ auto_zwj (auto_zwj_),
recurse_func (NULL),
nesting_level_left (MAX_NESTING_LEVEL),
lookup_props (0),
@@ -383,16 +383,12 @@ struct hb_apply_context_t
end (c->buffer->len)
{
matcher.set_lookup_props (c->lookup_props);
- if (c->auto_joiners)
- {
- /* Ignore ZWNJ if we are matching GSUB context, or matching GPOS. */
- matcher.set_ignore_zwnj (context_match || c->table_index == 1);
- matcher.set_ignore_zwj (true);
- }
+ /* Ignore ZWNJ if we are matching GSUB context, or matching GPOS. */
+ matcher.set_ignore_zwnj (context_match || c->table_index == 1);
+ /* Ignore ZWJ if we are matching GSUB context, or matching GPOS, or if asked to. */
+ matcher.set_ignore_zwj (context_match || c->table_index == 1 || c->auto_zwj);
if (!context_match)
- {
matcher.set_mask (c->lookup_mask);
- }
matcher.set_syllable (start_index_ == c->buffer->idx ? c->buffer->cur().syllable () : 0);
}
inline void set_lookup_props (unsigned int lookup_props) { matcher.set_lookup_props (lookup_props); }
@@ -457,16 +453,12 @@ struct hb_apply_context_t
num_items (num_items_)
{
matcher.set_lookup_props (c->lookup_props);
- if (c->auto_joiners)
- {
- /* Ignore ZWNJ if we are matching GSUB context, or matching GPOS. */
- matcher.set_ignore_zwnj (context_match || c->table_index == 1);
- matcher.set_ignore_zwj (true);
- }
+ /* Ignore ZWNJ if we are matching GSUB context, or matching GPOS. */
+ matcher.set_ignore_zwnj (context_match || c->table_index == 1);
+ /* Ignore ZWJ if we are matching GSUB context, or matching GPOS, or if asked to. */
+ matcher.set_ignore_zwj (context_match || c->table_index == 1 || c->auto_zwj);
if (!context_match)
- {
matcher.set_mask (c->lookup_mask);
- }
matcher.set_syllable (start_index_ == c->buffer->idx ? c->buffer->cur().syllable () : 0);
}
inline void set_lookup_props (unsigned int lookup_props) { matcher.set_lookup_props (lookup_props); }
@@ -1493,13 +1485,13 @@ struct ContextFormat3
struct Context
{
template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
+ inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_PROCESS (this);
+ TRACE_DISPATCH (this);
switch (u.format) {
- case 1: return TRACE_RETURN (c->process (u.format1));
- case 2: return TRACE_RETURN (c->process (u.format2));
- case 3: return TRACE_RETURN (c->process (u.format3));
+ case 1: return TRACE_RETURN (c->dispatch (u.format1));
+ case 2: return TRACE_RETURN (c->dispatch (u.format2));
+ case 3: return TRACE_RETURN (c->dispatch (u.format3));
default:return TRACE_RETURN (c->default_return_value ());
}
}
@@ -2109,13 +2101,13 @@ struct ChainContextFormat3
struct ChainContext
{
template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
+ inline typename context_t::return_t dispatch (context_t *c) const
{
- TRACE_PROCESS (this);
+ TRACE_DISPATCH (this);
switch (u.format) {
- case 1: return TRACE_RETURN (c->process (u.format1));
- case 2: return TRACE_RETURN (c->process (u.format2));
- case 3: return TRACE_RETURN (c->process (u.format3));
+ case 1: return TRACE_RETURN (c->dispatch (u.format1));
+ case 2: return TRACE_RETURN (c->dispatch (u.format2));
+ case 3: return TRACE_RETURN (c->dispatch (u.format3));
default:return TRACE_RETURN (c->default_return_value ());
}
}
@@ -2189,9 +2181,9 @@ struct Extension
}
template <typename context_t>
- inline typename context_t::return_t process (context_t *c) const
+ inline typename context_t::return_t dispatch (context_t *c) const
{
- return get_subtable<typename T::LookupSubTable> ().process (c, get_type ());
+ return get_subtable<typename T::LookupSubTable> ().dispatch (c, get_type ());
}
inline bool sanitize_self (hb_sanitize_context_t *c) {
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-private.hh
index d826108c11b..4866c419125 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout-private.hh
@@ -207,7 +207,7 @@ hb_ot_layout_substitute_lookup (hb_font_t *font,
hb_buffer_t *buffer,
unsigned int lookup_index,
hb_mask_t mask,
- hb_bool_t auto_joiners);
+ hb_bool_t auto_zwj);
/* Should be called after all the substitute_lookup's are done */
HB_INTERNAL void
@@ -225,7 +225,7 @@ hb_ot_layout_position_lookup (hb_font_t *font,
hb_buffer_t *buffer,
unsigned int lookup_index,
hb_mask_t mask,
- hb_bool_t auto_joiners);
+ hb_bool_t auto_zwj);
/* Should be called after all the position_lookup's are done */
HB_INTERNAL void
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout.cc
index 0349b328d26..8161ce3d9e2 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout.cc
@@ -667,11 +667,11 @@ hb_ot_layout_substitute_lookup (hb_font_t *font,
hb_buffer_t *buffer,
unsigned int lookup_index,
hb_mask_t mask,
- hb_bool_t auto_joiners)
+ hb_bool_t auto_zwj)
{
if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gsub_lookup_count)) return false;
- OT::hb_apply_context_t c (0, font, buffer, mask, auto_joiners);
+ OT::hb_apply_context_t c (0, font, buffer, mask, auto_zwj);
const OT::SubstLookup& l = hb_ot_layout_from_face (font->face)->gsub->get_lookup (lookup_index);
@@ -717,11 +717,11 @@ hb_ot_layout_position_lookup (hb_font_t *font,
hb_buffer_t *buffer,
unsigned int lookup_index,
hb_mask_t mask,
- hb_bool_t auto_joiners)
+ hb_bool_t auto_zwj)
{
if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gpos_lookup_count)) return false;
- OT::hb_apply_context_t c (1, font, buffer, mask, auto_joiners);
+ OT::hb_apply_context_t c (1, font, buffer, mask, auto_zwj);
const OT::PosLookup& l = hb_ot_layout_from_face (font->face)->gpos->get_lookup (lookup_index);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout.h
index 134f1a6c164..134f1a6c164 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-layout.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-layout.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-map-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-map-private.hh
index 942e9f4aa6f..a679fb5990e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-map-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-map-private.hh
@@ -50,7 +50,7 @@ struct hb_ot_map_t
hb_mask_t mask;
hb_mask_t _1_mask; /* mask for value=1, for quick access */
unsigned int needs_fallback : 1;
- unsigned int auto_joiners : 1;
+ unsigned int auto_zwj : 1;
static int cmp (const feature_map_t *a, const feature_map_t *b)
{ return a->tag < b->tag ? -1 : a->tag > b->tag ? 1 : 0; }
@@ -58,7 +58,7 @@ struct hb_ot_map_t
struct lookup_map_t {
unsigned short index;
- unsigned short auto_joiners : 1;
+ unsigned short auto_zwj : 1;
hb_mask_t mask;
static int cmp (const lookup_map_t *a, const lookup_map_t *b)
@@ -139,7 +139,7 @@ struct hb_ot_map_t
unsigned int table_index,
unsigned int feature_index,
hb_mask_t mask,
- bool auto_joiners);
+ bool auto_zwj);
hb_mask_t global_mask;
@@ -152,8 +152,10 @@ enum hb_ot_map_feature_flags_t {
F_NONE = 0x0000,
F_GLOBAL = 0x0001,
F_HAS_FALLBACK = 0x0002,
- F_MANUAL_JOINERS = 0x0004
+ F_MANUAL_ZWJ = 0x0004
};
+/* Macro version for where const is desired. */
+#define F_COMBINE(l,r) (hb_ot_map_feature_flags_t ((unsigned int) (l) | (unsigned int) (r)))
inline hb_ot_map_feature_flags_t
operator | (hb_ot_map_feature_flags_t l, hb_ot_map_feature_flags_t r)
{ return hb_ot_map_feature_flags_t ((unsigned int) l | (unsigned int) r); }
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-map.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-map.cc
index 28a43a4dd2f..85e6e16375a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-map.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-map.cc
@@ -34,7 +34,7 @@ hb_ot_map_t::add_lookups (hb_face_t *face,
unsigned int table_index,
unsigned int feature_index,
hb_mask_t mask,
- bool auto_joiners)
+ bool auto_zwj)
{
unsigned int lookup_indices[32];
unsigned int offset, len;
@@ -54,7 +54,7 @@ hb_ot_map_t::add_lookups (hb_face_t *face,
return;
lookup->mask = mask;
lookup->index = lookup_indices[i];
- lookup->auto_joiners = auto_joiners;
+ lookup->auto_zwj = auto_zwj;
}
offset += len;
@@ -113,7 +113,7 @@ void hb_ot_map_t::substitute (const hb_ot_shape_plan_t *plan, hb_font_t *font, h
hb_ot_layout_substitute_lookup (font, buffer,
lookups[table_index][i].index,
lookups[table_index][i].mask,
- lookups[table_index][i].auto_joiners);
+ lookups[table_index][i].auto_zwj);
buffer->clear_output ();
@@ -124,7 +124,7 @@ void hb_ot_map_t::substitute (const hb_ot_shape_plan_t *plan, hb_font_t *font, h
for (; i < lookups[table_index].len; i++)
hb_ot_layout_substitute_lookup (font, buffer, lookups[table_index][i].index,
lookups[table_index][i].mask,
- lookups[table_index][i].auto_joiners);
+ lookups[table_index][i].auto_zwj);
}
void hb_ot_map_t::position (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const
@@ -137,7 +137,7 @@ void hb_ot_map_t::position (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_
for (; i < pause->num_lookups; i++)
hb_ot_layout_position_lookup (font, buffer, lookups[table_index][i].index,
lookups[table_index][i].mask,
- lookups[table_index][i].auto_joiners);
+ lookups[table_index][i].auto_zwj);
if (pause->callback)
pause->callback (plan, font, buffer);
@@ -146,7 +146,7 @@ void hb_ot_map_t::position (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_
for (; i < lookups[table_index].len; i++)
hb_ot_layout_position_lookup (font, buffer, lookups[table_index][i].index,
lookups[table_index][i].mask,
- lookups[table_index][i].auto_joiners);
+ lookups[table_index][i].auto_zwj);
}
void hb_ot_map_t::collect_lookups (unsigned int table_index, hb_set_t *lookups_out) const
@@ -243,7 +243,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
map->index[1] = feature_index[1];
map->stage[0] = info->stage[0];
map->stage[1] = info->stage[1];
- map->auto_joiners = !(info->flags & F_MANUAL_JOINERS);
+ map->auto_zwj = !(info->flags & F_MANUAL_ZWJ);
if ((info->flags & F_GLOBAL) && info->max_value == 1) {
/* Uses the global bit */
map->shift = 0;
@@ -286,7 +286,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
m.add_lookups (face, table_index,
m.features[i].index[table_index],
m.features[i].mask,
- m.features[i].auto_joiners);
+ m.features[i].auto_zwj);
/* Sort lookups and merge duplicates */
if (last_num_lookups < m.lookups[table_index].len)
@@ -300,7 +300,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
else
{
m.lookups[table_index][j].mask |= m.lookups[table_index][i].mask;
- m.lookups[table_index][j].auto_joiners &= m.lookups[table_index][i].auto_joiners;
+ m.lookups[table_index][j].auto_zwj &= m.lookups[table_index][i].auto_zwj;
}
m.lookups[table_index].shrink (j + 1);
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-maxp-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-maxp-table.hh
index 0ce3ebcc2a6..0ce3ebcc2a6 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-maxp-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-maxp-table.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-name-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-name-table.hh
index 75a1b94ea31..75a1b94ea31 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-name-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-name-table.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-arabic-fallback.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-arabic-fallback.hh
index 6f8e9510fe3..5e151f75704 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-arabic-fallback.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-arabic-fallback.hh
@@ -244,7 +244,7 @@ arabic_fallback_plan_shape (arabic_fallback_plan_t *fallback_plan,
{
for (unsigned int i = 0; i < ARABIC_NUM_FALLBACK_FEATURES; i++)
if (fallback_plan->lookup_array[i]) {
- OT::hb_apply_context_t c (0, font, buffer, fallback_plan->mask_array[i], true/*auto_joiners*/);
+ OT::hb_apply_context_t c (0, font, buffer, fallback_plan->mask_array[i], true/*auto_zwj*/);
fallback_plan->lookup_array[i]->apply_string (&c, &fallback_plan->digest_array[i]);
}
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-arabic-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-arabic-table.hh
index 730a275bf0a..730a275bf0a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-arabic-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-arabic-table.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-arabic.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-arabic.cc
index 18b3d02dc00..18b3d02dc00 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-arabic.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-arabic.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-default.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-default.cc
index fad57f65e4a..fad57f65e4a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-default.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-default.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic-machine.hh
index 9bae3a3b8c3..9bae3a3b8c3 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic-machine.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic-machine.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic-machine.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic-machine.rl
index f9f07d801d9..f9f07d801d9 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic-machine.rl
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic-machine.rl
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic-private.hh
index 39268b14533..39268b14533 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic-table.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic-table.cc
index 18a022bc507..18a022bc507 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic-table.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic-table.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic.cc
index 0beddc81989..eb1e0be9def 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-indic.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-indic.cc
@@ -339,18 +339,18 @@ indic_features[] =
* Basic features.
* These features are applied in order, one at a time, after initial_reordering.
*/
- {HB_TAG('n','u','k','t'), F_MANUAL_JOINERS | F_GLOBAL},
- {HB_TAG('a','k','h','n'), F_MANUAL_JOINERS | F_GLOBAL},
- {HB_TAG('r','p','h','f'), F_MANUAL_JOINERS},
- {HB_TAG('r','k','r','f'), F_MANUAL_JOINERS | F_GLOBAL},
- {HB_TAG('p','r','e','f'), F_MANUAL_JOINERS},
- {HB_TAG('b','l','w','f'), F_MANUAL_JOINERS},
- {HB_TAG('h','a','l','f'), F_MANUAL_JOINERS},
- {HB_TAG('a','b','v','f'), F_MANUAL_JOINERS},
- {HB_TAG('p','s','t','f'), F_MANUAL_JOINERS},
- {HB_TAG('c','f','a','r'), F_MANUAL_JOINERS},
- {HB_TAG('v','a','t','u'), F_MANUAL_JOINERS | F_GLOBAL},
- {HB_TAG('c','j','c','t'), F_MANUAL_JOINERS | F_GLOBAL},
+ {HB_TAG('n','u','k','t'), F_GLOBAL},
+ {HB_TAG('a','k','h','n'), F_GLOBAL},
+ {HB_TAG('r','p','h','f'), F_NONE},
+ {HB_TAG('r','k','r','f'), F_GLOBAL},
+ {HB_TAG('p','r','e','f'), F_NONE},
+ {HB_TAG('b','l','w','f'), F_NONE},
+ {HB_TAG('h','a','l','f'), F_NONE},
+ {HB_TAG('a','b','v','f'), F_NONE},
+ {HB_TAG('p','s','t','f'), F_NONE},
+ {HB_TAG('c','f','a','r'), F_NONE},
+ {HB_TAG('v','a','t','u'), F_GLOBAL},
+ {HB_TAG('c','j','c','t'), F_GLOBAL},
/*
* Other features.
* These features are applied all at once, after final_reordering.
@@ -428,12 +428,12 @@ collect_features_indic (hb_ot_shape_planner_t *plan)
unsigned int i = 0;
map->add_gsub_pause (initial_reordering);
for (; i < INDIC_BASIC_FEATURES; i++) {
- map->add_feature (indic_features[i].tag, 1, indic_features[i].flags);
+ map->add_feature (indic_features[i].tag, 1, indic_features[i].flags | F_MANUAL_ZWJ);
map->add_gsub_pause (NULL);
}
map->add_gsub_pause (final_reordering);
for (; i < INDIC_NUM_FEATURES; i++) {
- map->add_feature (indic_features[i].tag, 1, indic_features[i].flags);
+ map->add_feature (indic_features[i].tag, 1, indic_features[i].flags | F_MANUAL_ZWJ);
}
}
@@ -457,10 +457,10 @@ struct would_substitute_feature_t
&lookups, &count);
}
- inline bool would_substitute (hb_codepoint_t *glyphs,
- unsigned int glyphs_count,
- bool zero_context,
- hb_face_t *face) const
+ inline bool would_substitute (const hb_codepoint_t *glyphs,
+ unsigned int glyphs_count,
+ bool zero_context,
+ 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))
@@ -546,13 +546,30 @@ data_destroy_indic (void *data)
static indic_position_t
consonant_position_from_face (const indic_shape_plan_t *indic_plan,
- hb_codepoint_t *glyphs, unsigned int glyphs_len,
- hb_face_t *face)
+ const hb_codepoint_t glyphs[2],
+ hb_face_t *face)
{
+ /* For old-spec, the order of glyphs is Consonant,Virama,
+ * whereas for new-spec, it's Virama,Consonant. However,
+ * some broken fonts (like Free Sans) simply copied lookups
+ * from old-spec to new-spec without modification.
+ * And oddly enough, Uniscribe seems to respect those lookups.
+ * Eg. in the sequence U+0924,U+094D,U+0930, Uniscribe finds
+ * base at 0. The font however, only has lookups matching
+ * 930,94D in 'blwf', not the expected 94D,930 (with new-spec
+ * table). As such, we simply match both sequences. Seems
+ * to work. */
bool zero_context = indic_plan->is_old_spec ? false : true;
- if (indic_plan->pref.would_substitute (glyphs, glyphs_len, zero_context, face)) return POS_BELOW_C;
- if (indic_plan->blwf.would_substitute (glyphs, glyphs_len, zero_context, face)) return POS_BELOW_C;
- if (indic_plan->pstf.would_substitute (glyphs, glyphs_len, zero_context, face)) return POS_POST_C;
+ hb_codepoint_t glyphs_r[2] = {glyphs[1], glyphs[0]};
+ if (indic_plan->pref.would_substitute (glyphs , 2, zero_context, face) ||
+ indic_plan->pref.would_substitute (glyphs_r, 2, zero_context, face))
+ return POS_POST_C;
+ if (indic_plan->blwf.would_substitute (glyphs , 2, zero_context, face) ||
+ indic_plan->blwf.would_substitute (glyphs_r, 2, zero_context, face))
+ return POS_BELOW_C;
+ if (indic_plan->pstf.would_substitute (glyphs , 2, zero_context, face) ||
+ indic_plan->pstf.would_substitute (glyphs_r, 2, zero_context, face))
+ return POS_POST_C;
return POS_BASE_C;
}
@@ -610,16 +627,15 @@ update_consonant_positions (const hb_ot_shape_plan_t *plan,
{
const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
- unsigned int consonant_pos = indic_plan->is_old_spec ? 0 : 1;
hb_codepoint_t glyphs[2];
- if (indic_plan->get_virama_glyph (font, &glyphs[1 - consonant_pos]))
+ if (indic_plan->get_virama_glyph (font, &glyphs[0]))
{
hb_face_t *face = font->face;
unsigned int count = buffer->len;
for (unsigned int i = 0; i < count; i++)
if (buffer->info[i].indic_position() == POS_BASE_C) {
- glyphs[consonant_pos] = buffer->info[i].codepoint;
- buffer->info[i].indic_position() = consonant_position_from_face (indic_plan, glyphs, 2, face);
+ glyphs[1] = buffer->info[i].codepoint;
+ buffer->info[i].indic_position() = consonant_position_from_face (indic_plan, glyphs, face);
}
}
}
@@ -717,7 +733,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
*
* IMPLEMENTATION NOTES:
*
- * Our pre-base reordering Ra's are marked POS_BELOW, so will be skipped
+ * Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped
* by the logic above already.
*/
@@ -1005,7 +1021,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
/* ZWJ/ZWNJ should disable CJCT. They do that by simply
* being there, since we don't skip them for the CJCT
- * feature (ie. F_MANUAL_JOINERS) */
+ * feature (ie. F_MANUAL_ZWJ) */
/* A ZWNJ disables HALF. */
if (non_joiner)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-myanmar-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-myanmar-machine.hh
index 797bfc5bea0..797bfc5bea0 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-myanmar-machine.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-myanmar-machine.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-myanmar-machine.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-myanmar-machine.rl
index 51d42dd64ab..51d42dd64ab 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-myanmar-machine.rl
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-myanmar-machine.rl
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-myanmar.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-myanmar.cc
index 8491047b712..ff13bdd1ebe 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-myanmar.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-myanmar.cc
@@ -92,12 +92,12 @@ collect_features_myanmar (hb_ot_shape_planner_t *plan)
map->add_gsub_pause (initial_reordering);
for (unsigned int i = 0; i < ARRAY_LENGTH (basic_features); i++)
{
- map->add_feature (basic_features[i], 1, F_GLOBAL | F_MANUAL_JOINERS);
+ map->add_feature (basic_features[i], 1, F_GLOBAL | F_MANUAL_ZWJ);
map->add_gsub_pause (NULL);
}
map->add_gsub_pause (final_reordering);
for (unsigned int i = 0; i < ARRAY_LENGTH (other_features); i++)
- map->add_feature (other_features[i], 1, F_GLOBAL);
+ map->add_feature (other_features[i], 1, F_GLOBAL | F_MANUAL_ZWJ);
}
static void
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-private.hh
index 3c9922dc905..3c9922dc905 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-sea-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-sea-machine.hh
index 86b7ae7d5ca..86b7ae7d5ca 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-sea-machine.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-sea-machine.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-sea-machine.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-sea-machine.rl
index 46140fc4d5f..46140fc4d5f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-sea-machine.rl
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-sea-machine.rl
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-sea.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-sea.cc
index 94386588f70..9c0c303e3df 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-sea.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-sea.cc
@@ -93,12 +93,12 @@ collect_features_sea (hb_ot_shape_planner_t *plan)
map->add_gsub_pause (initial_reordering);
for (unsigned int i = 0; i < ARRAY_LENGTH (basic_features); i++)
{
- map->add_feature (basic_features[i], 1, F_GLOBAL | F_MANUAL_JOINERS);
+ map->add_feature (basic_features[i], 1, F_GLOBAL | F_MANUAL_ZWJ);
map->add_gsub_pause (NULL);
}
map->add_gsub_pause (final_reordering);
for (unsigned int i = 0; i < ARRAY_LENGTH (other_features); i++)
- map->add_feature (other_features[i], 1, F_GLOBAL);
+ map->add_feature (other_features[i], 1, F_GLOBAL | F_MANUAL_ZWJ);
}
static void
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-thai.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-thai.cc
index 5cbb6e391c2..5cbb6e391c2 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-complex-thai.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-complex-thai.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-fallback-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-fallback-private.hh
index ec653513f1b..ec653513f1b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-fallback-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-fallback-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-fallback.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-fallback.cc
index afe0f392cc7..3341825449b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-fallback.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-fallback.cc
@@ -420,7 +420,7 @@ _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
hb_mask_t kern_mask = plan->map.get_1_mask (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction) ?
HB_TAG ('k','e','r','n') : HB_TAG ('v','k','r','n'));
- OT::hb_apply_context_t c (1, font, buffer, kern_mask, true/*auto_joiners*/);
+ OT::hb_apply_context_t c (1, font, buffer, kern_mask, true/*auto_zwj*/);
c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
for (buffer->idx = 0; buffer->idx < count;)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-normalize-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-normalize-private.hh
index 8112f03aee9..8112f03aee9 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-normalize-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-normalize-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-normalize.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-normalize.cc
index 344c0ff8497..344c0ff8497 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-normalize.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-normalize.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-private.hh
index 9599f8e722c..9599f8e722c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape.cc
index f65861f959f..f65861f959f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-shape.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-shape.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-tag.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-tag.cc
index 91ebec76ee3..91ebec76ee3 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-tag.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-tag.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-tag.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-tag.h
index 1bf12ab3c09..1bf12ab3c09 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot-tag.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot-tag.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot.h
index 80739063991..80739063991 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ot.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ot.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-private.hh
index 15e4f5f6920..ff1e85d8d0f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-private.hh
@@ -376,6 +376,14 @@ struct hb_prealloced_array_t
}
};
+#define HB_AUTO_ARRAY_PREALLOCED 64
+template <typename Type>
+struct hb_auto_array_t : hb_prealloced_array_t <Type, HB_AUTO_ARRAY_PREALLOCED>
+{
+ hb_auto_array_t (void) { hb_prealloced_array_t<Type, HB_AUTO_ARRAY_PREALLOCED>::init (); }
+ ~hb_auto_array_t (void) { hb_prealloced_array_t<Type, HB_AUTO_ARRAY_PREALLOCED>::finish (); }
+};
+
#define HB_LOCKABLE_SET_INIT {HB_PREALLOCED_ARRAY_INIT}
template <typename item_t, typename lock_t>
@@ -516,10 +524,12 @@ static inline uint32_t hb_uint32_swap (const uint32_t v)
/* ASCII tag/character handling */
-static inline unsigned char ISALPHA (unsigned char c)
+static inline bool ISALPHA (unsigned char c)
{ return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); }
-static inline unsigned char ISALNUM (unsigned char c)
+static inline bool ISALNUM (unsigned char c)
{ return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'); }
+static inline bool ISSPACE (unsigned char c)
+{ return c == ' ' || c =='\f'|| c =='\n'|| c =='\r'|| c =='\t'|| c =='\v'; }
static inline unsigned char TOUPPER (unsigned char c)
{ return (c >= 'a' && c <= 'z') ? c - 'a' + 'A' : c; }
static inline unsigned char TOLOWER (unsigned char c)
@@ -594,6 +604,8 @@ _hb_debug_msg_va (const char *what,
if (func)
{
+ unsigned int func_len = strlen (func);
+#ifndef HB_DEBUG_VERBOSE
/* Skip "typename" */
if (0 == strncmp (func, "typename ", 9))
func += 9;
@@ -603,7 +615,9 @@ _hb_debug_msg_va (const char *what,
func = space + 1;
/* Skip parameter list */
const char *paren = strchr (func, '(');
- unsigned int func_len = paren ? paren - func : strlen (func);
+ if (paren)
+ func_len = paren - func;
+#endif
fprintf (stderr, "%.*s: ", func_len, func);
}
@@ -841,8 +855,9 @@ hb_codepoint_parse (const char *s, unsigned int len, int base, hb_codepoint_t *o
{
/* Pain because we don't know whether s is nul-terminated. */
char buf[64];
- strncpy (buf, s, MIN (ARRAY_LENGTH (buf) - 1, len));
- buf[MIN (ARRAY_LENGTH (buf) - 1, len)] = '\0';
+ len = MIN (ARRAY_LENGTH (buf) - 1, len);
+ strncpy (buf, s, len);
+ buf[len] = '\0';
char *end;
errno = 0;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-set-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-set-private.hh
index 5e30a7e3616..5e30a7e3616 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-set-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-set-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-set.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-set.cc
index 5f427a5d8e0..5f427a5d8e0 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-set.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-set.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-set.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-set.h
index 291e24974e6..291e24974e6 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-set.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-set.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape-plan-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape-plan-private.hh
index dd014e38d01..dd014e38d01 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape-plan-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape-plan-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape-plan.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape-plan.cc
index a6d2d262100..a6d2d262100 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape-plan.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape-plan.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape-plan.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape-plan.h
index 8f54552f90b..8f54552f90b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape-plan.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape-plan.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape.cc
index 7d748d7d3c8..67ef7e6a8f5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape.cc
@@ -38,10 +38,8 @@ static void
parse_space (const char **pp, const char *end)
{
char c;
-#define ISSPACE(c) ((c)==' '||(c)=='\f'||(c)=='\n'||(c)=='\r'||(c)=='\t'||(c)=='\v')
while (*pp < end && (c = **pp, ISSPACE (c)))
(*pp)++;
-#undef ISSPACE
}
static hb_bool_t
@@ -60,16 +58,19 @@ static hb_bool_t
parse_uint (const char **pp, const char *end, unsigned int *pv)
{
char buf[32];
- strncpy (buf, *pp, end - *pp);
- buf[ARRAY_LENGTH (buf) - 1] = '\0';
+ unsigned int len = MIN (ARRAY_LENGTH (buf) - 1, (unsigned int) (end - *pp));
+ strncpy (buf, *pp, len);
+ buf[len] = '\0';
char *p = buf;
char *pend = p;
unsigned int v;
+ /* Intentionally use strtol instead of strtoul, such that
+ * -1 turns into "big number"... */
+ errno = 0;
v = strtol (p, &pend, 0);
-
- if (p == pend)
+ if (errno || p == pend)
return false;
*pv = v;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape.h
index 10a35cb517e..10a35cb517e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shape.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shape.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shaper-impl-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shaper-impl-private.hh
index 7844081e95b..7844081e95b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shaper-impl-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shaper-impl-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shaper-list.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shaper-list.hh
index b9c029e58f1..b9c029e58f1 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shaper-list.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shaper-list.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shaper-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shaper-private.hh
index 29c4493943d..29c4493943d 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shaper-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shaper-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shaper.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shaper.cc
index 44f718aa702..44f718aa702 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-shaper.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-shaper.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-tt-font.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-tt-font.cc
index c503a404380..c503a404380 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-tt-font.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-tt-font.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ucdn.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ucdn.cc
index 61e6ad36229..61e6ad36229 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-ucdn.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-ucdn.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-unicode-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-unicode-private.hh
index 724c6f94ed9..155a8a350b7 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-unicode-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-unicode-private.hh
@@ -129,6 +129,11 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
* be. That has been reported to the Unicode Technical Committee for
* consideration. As such, we include it here, since Uniscribe removes it.
*
+ * Note: While U+115F and U+1160 are Default_Ignorable, we do NOT want to
+ * hide them, as the way Uniscribe has implemented them is with regular
+ * spacing glyphs, and that's the way fonts are made to work. As such,
+ * we make exceptions for those two.
+ *
* Gathered from:
* http://unicode.org/cldr/utility/list-unicodeset.jsp?a=[:DI:]&abb=on&ucd=on&esc=on
*
@@ -141,8 +146,8 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
*
* 00AD ;SOFT HYPHEN
* 034F ;COMBINING GRAPHEME JOINER
- * 115F ;HANGUL CHOSEONG FILLER
- * 1160 ;HANGUL JUNGSEONG FILLER
+ * #115F ;HANGUL CHOSEONG FILLER
+ * #1160 ;HANGUL JUNGSEONG FILLER
* 17B4 ;KHMER VOWEL INHERENT AQ
* 17B5 ;KHMER VOWEL INHERENT AA
* 180B..180D ;MONGOLIAN FREE VARIATION SELECTOR THREE
@@ -168,7 +173,6 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
switch (page) {
case 0x00: return unlikely (ch == 0x00AD);
case 0x03: return unlikely (ch == 0x034F);
- case 0x11: return hb_in_range<hb_codepoint_t> (ch, 0x115F, 0x1160);
case 0x17: return hb_in_range<hb_codepoint_t> (ch, 0x17B4, 0x17B5);
case 0x18: return hb_in_range<hb_codepoint_t> (ch, 0x180B, 0x180E);
case 0x20: return hb_in_ranges<hb_codepoint_t> (ch, 0x200B, 0x200F,
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-unicode.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-unicode.cc
index 0a3907eec8c..0a3907eec8c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-unicode.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-unicode.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-unicode.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-unicode.h
index 2e10d98a3b3..2e10d98a3b3 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-unicode.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-unicode.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-uniscribe.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-uniscribe.cc
index 2f01c28778f..2f01c28778f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-uniscribe.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-uniscribe.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-uniscribe.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-uniscribe.h
index 51887c8794b..51887c8794b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-uniscribe.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-uniscribe.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-utf-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-utf-private.hh
index b9a6519d28e..b9a6519d28e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-utf-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-utf-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-version.h.in b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-version.h.in
index 43634f91ce8..43634f91ce8 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-version.h.in
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-version.h.in
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-warning.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-warning.cc
index 4f1f65f5a21..4f1f65f5a21 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb-warning.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb-warning.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb.h
index 52c479cc2e5..52c479cc2e5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/hb.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/hb.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/main.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/main.cc
index b362744e213..b362744e213 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/main.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/main.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/test-buffer-serialize.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/test-buffer-serialize.cc
new file mode 100644
index 00000000000..3577dbf688e
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/test-buffer-serialize.cc
@@ -0,0 +1,126 @@
+/*
+ * Copyright © 2010,2011,2013 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
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "hb.h"
+#ifdef HAVE_FREETYPE
+#include "hb-ft.h"
+#endif
+
+#ifdef HAVE_GLIB
+#include <glib.h>
+#endif
+#include <stdlib.h>
+#include <stdio.h>
+
+int
+main (int argc, char **argv)
+{
+ hb_blob_t *blob = NULL;
+
+ if (argc != 2) {
+ fprintf (stderr, "usage: %s font-file\n", argv[0]);
+ exit (1);
+ }
+
+ /* Create the blob */
+ {
+ const char *font_data;
+ unsigned int len;
+ hb_destroy_func_t destroy;
+ void *user_data;
+ hb_memory_mode_t mm;
+
+#ifdef HAVE_GLIB
+ GMappedFile *mf = g_mapped_file_new (argv[1], false, NULL);
+ font_data = g_mapped_file_get_contents (mf);
+ len = g_mapped_file_get_length (mf);
+ destroy = (hb_destroy_func_t) g_mapped_file_unref;
+ user_data = (void *) mf;
+ mm = HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE;
+#else
+ FILE *f = fopen (argv[1], "rb");
+ fseek (f, 0, SEEK_END);
+ len = ftell (f);
+ fseek (f, 0, SEEK_SET);
+ font_data = (const char *) malloc (len);
+ if (!font_data) len = 0;
+ len = fread ((char *) font_data, 1, len, f);
+ destroy = free;
+ user_data = (void *) font_data;
+ fclose (f);
+ mm = HB_MEMORY_MODE_WRITABLE;
+#endif
+
+ blob = hb_blob_create (font_data, len, mm, user_data, destroy);
+ }
+
+ hb_face_t *face = hb_face_create (blob, 0 /* first face */);
+ hb_blob_destroy (blob);
+ blob = NULL;
+
+ unsigned int upem = hb_face_get_upem (face);
+ hb_font_t *font = hb_font_create (face);
+ hb_face_destroy (face);
+ hb_font_set_scale (font, upem, upem);
+#ifdef HAVE_FREETYPE
+ hb_ft_font_set_funcs (font);
+#endif
+
+ hb_buffer_t *buf;
+ buf = hb_buffer_create ();
+
+ bool ret = true;
+ char line[BUFSIZ], out[BUFSIZ];
+ while (fgets (line, sizeof(line), stdin) != 0)
+ {
+ hb_buffer_clear_contents (buf);
+
+ const char *p = line;
+ while (hb_buffer_deserialize_glyphs (buf,
+ p, -1, &p,
+ font,
+ HB_BUFFER_SERIALIZE_FORMAT_JSON))
+ ;
+ if (*p && *p != '\n')
+ ret = false;
+
+ hb_buffer_serialize_glyphs (buf, 0, hb_buffer_get_length (buf),
+ out, sizeof (out), NULL,
+ font, HB_BUFFER_SERIALIZE_FORMAT_JSON,
+ HB_BUFFER_SERIALIZE_FLAGS_DEFAULT);
+ puts (out);
+ }
+
+ hb_buffer_destroy (buf);
+
+ hb_font_destroy (font);
+
+ return !ret;
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/test-size-params.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/test-size-params.cc
index 947b5669a14..947b5669a14 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/test-size-params.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/test-size-params.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/test-would-substitute.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/test-would-substitute.cc
index 4731e265607..4731e265607 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/test-would-substitute.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/test-would-substitute.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/test.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/test.cc
index 22108b86b7a..22108b86b7a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.13/src/test.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.14/src/test.cc
diff --git a/Build/source/libs/harfbuzz/version.ac b/Build/source/libs/harfbuzz/version.ac
index 72db834324a..0a42008254c 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], [0.9.13])
+m4_define([harfbuzz_version], [0.9.14])