summaryrefslogtreecommitdiff
path: root/Build
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2014-07-10 07:21:55 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2014-07-10 07:21:55 +0000
commit1c10dcb19acce6c92495df3521ec8462699bfb61 (patch)
treec67013c487d3e3a90c8573fd21ceadbe71b1367b /Build
parent5e1c96bef29aeaaaa4c1aabb42336268c73ee974 (diff)
harfbuzz 0.9.30
git-svn-id: svn://tug.org/texlive/trunk@34564 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build')
-rw-r--r--Build/source/libs/README2
-rw-r--r--Build/source/libs/harfbuzz/ChangeLog5
-rw-r--r--Build/source/libs/harfbuzz/Makefile.in5
-rw-r--r--Build/source/libs/harfbuzz/config.h.in3
-rwxr-xr-xBuild/source/libs/harfbuzz/configure265
-rw-r--r--Build/source/libs/harfbuzz/configure.ac15
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-arabic-table.hh942
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30-PATCHES/ChangeLog (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29-PATCHES/ChangeLog)7
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30-PATCHES/TL-Changes (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29-PATCHES/TL-Changes)2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30-PATCHES/patch-01-cygwin (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29-PATCHES/patch-01-cygwin)8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/AUTHORS (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/AUTHORS)1
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/Android.mk (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/Android.mk)38
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/ChangeLog (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/ChangeLog)1074
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/Makefile.am (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/Makefile.am)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/NEWS (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/NEWS)17
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/README (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/README)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/THANKS (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/THANKS)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/TODO (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/TODO)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.30/autogen.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/autogen.sh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/config.h.in (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/config.h.in)3
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/configure.ac (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/configure.ac)9
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/gtk-doc.make (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/gtk-doc.make)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/harfbuzz.doap (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/harfbuzz.doap)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/Makefile.am (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/Makefile.am)2
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-c-linkage-decls.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-c-linkage-decls.sh)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-defs.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-defs.sh)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-header-guards.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-header-guards.sh)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-includes.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-includes.sh)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-libstdc++.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-libstdc++.sh)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-static-inits.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-static-inits.sh)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-symbols.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-symbols.sh)0
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.30/src/gen-arabic-table.py (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/gen-arabic-table.py)156
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-0.9.30/src/gen-indic-table.py (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/gen-indic-table.py)79
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/harfbuzz-gobject.pc.in (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/harfbuzz-gobject.pc.in)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/harfbuzz-icu.pc.in (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/harfbuzz-icu.pc.in)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/harfbuzz.pc.in (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/harfbuzz.pc.in)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-atomic-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-atomic-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-blob.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-blob.cc)2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-blob.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-blob.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-deserialize-json.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-deserialize-json.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-deserialize-json.rl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-deserialize-json.rl)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-deserialize-text.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-deserialize-text.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-deserialize-text.rl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-deserialize-text.rl)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-serialize.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-serialize.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-cache-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-cache-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-common.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-common.cc)22
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-common.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-common.h)27
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-coretext.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-coretext.cc)6
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-coretext.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-coretext.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-deprecated.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-deprecated.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-face-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-face-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-face.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-face.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-face.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-face.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-fallback-shape.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-fallback-shape.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-font-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-font-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-font.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-font.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-font.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-font.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ft.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ft.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ft.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ft.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-glib.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-glib.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-glib.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-glib.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject-enums.cc.tmpl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject-enums.cc.tmpl)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject-enums.h.tmpl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject-enums.h.tmpl)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject-structs.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject-structs.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject-structs.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject-structs.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-graphite2.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-graphite2.cc)5
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-graphite2.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-graphite2.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-icu.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-icu.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-icu.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-icu.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-mutex-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-mutex-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-object-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-object-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-open-file-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-open-file-private.hh)8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-open-type-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-open-type-private.hh)96
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-cmap-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-cmap-table.hh)219
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-font.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-font.cc)20
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-font.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-font.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-head-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-head-table.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-hhea-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-hhea-table.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-hmtx-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-hmtx-table.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-common-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-common-private.hh)23
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-gdef-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-gdef-table.hh)2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-gpos-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-gpos-table.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-gsub-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-gsub-table.hh)46
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-gsubgpos-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-gsubgpos-private.hh)28
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-jstf-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-jstf-table.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-private.hh)24
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout.cc)34
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout.h)8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-map-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-map-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-map.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-map.cc)54
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-maxp-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-maxp-table.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-name-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-name-table.hh)2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-arabic-fallback.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-arabic-fallback.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-arabic-table.hh383
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-arabic.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-arabic.cc)44
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-default.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-default.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-hangul.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-hangul.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-hebrew.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-hebrew.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic-machine.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic-machine.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic-machine.rl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic-machine.rl)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic-private.hh)95
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic-table.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic-table.cc)721
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic.cc)90
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-myanmar-machine.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-myanmar-machine.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-myanmar-machine.rl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-myanmar-machine.rl)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-myanmar.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-myanmar.cc)2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-private.hh)4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-sea-machine.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-sea-machine.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-sea-machine.rl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-sea-machine.rl)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-sea.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-sea.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-thai.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-thai.cc)5
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-tibetan.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-tibetan.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-fallback-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-fallback-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-fallback.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-fallback.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-normalize-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-normalize-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-normalize.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-normalize.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape.cc)50
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape.h)21
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-tag.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-tag.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-tag.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-tag.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-private.hh)155
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-set-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-set-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-set.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-set.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-set.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-set.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape-plan-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape-plan-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape-plan.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape-plan.cc)4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape-plan.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape-plan.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shaper-impl-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shaper-impl-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shaper-list.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shaper-list.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shaper-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shaper-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shaper.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shaper.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ucdn.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ucdn.cc)23
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-unicode-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-unicode-private.hh)66
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-unicode.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-unicode.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-unicode.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-unicode.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-uniscribe.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-uniscribe.cc)4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-uniscribe.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-uniscribe.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-utf-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-utf-private.hh)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-version.h.in (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-version.h.in)10
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-warning.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-warning.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb.h)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/main.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/main.cc)4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/test-buffer-serialize.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/test-buffer-serialize.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/test-size-params.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/test-size-params.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/test-would-substitute.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/test-would-substitute.cc)0
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/test.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/test.cc)0
-rw-r--r--Build/source/libs/harfbuzz/include/Makefile.in1
-rw-r--r--Build/source/libs/harfbuzz/version.ac2
156 files changed, 3106 insertions, 1837 deletions
diff --git a/Build/source/libs/README b/Build/source/libs/README
index 2839de6120f..92cb1e98cf5 100644
--- a/Build/source/libs/README
+++ b/Build/source/libs/README
@@ -24,7 +24,7 @@ gmp 6.0.0 - checked 25mar14
graphite2 1.2.4 - checked 2dec13
http://sourceforge.net/projects/silgraphite/files/graphite2/
-harfbuzz 0.9.29 - checked 29may14
+harfbuzz 0.9.30 - checked 10jul14
http://www.freedesktop.org/software/harfbuzz/release/
icu 53.1 (release) - checked 3apr14
diff --git a/Build/source/libs/harfbuzz/ChangeLog b/Build/source/libs/harfbuzz/ChangeLog
index 8addc050aba..23af93f40e6 100644
--- a/Build/source/libs/harfbuzz/ChangeLog
+++ b/Build/source/libs/harfbuzz/ChangeLog
@@ -1,3 +1,8 @@
+2014-07-10 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ Import harfbuzz-0.9.30.
+ * configure.ac, version.ac: Adjust.
+
2014-06-16 Peter Breitenlohner <peb@mppmu.mpg.de>
Import harfbuzz-0.9.29.
diff --git a/Build/source/libs/harfbuzz/Makefile.in b/Build/source/libs/harfbuzz/Makefile.in
index 4282c9a5f99..9b4a0e97262 100644
--- a/Build/source/libs/harfbuzz/Makefile.in
+++ b/Build/source/libs/harfbuzz/Makefile.in
@@ -83,7 +83,7 @@ DIST_COMMON = $(srcdir)/../../am/reconfig.am \
$(srcdir)/../../am/rebuild.am $(srcdir)/Makefile.in \
$(srcdir)/Makefile.am $(top_srcdir)/configure \
$(am__configure_deps) $(srcdir)/config.h.in \
- $(top_srcdir)/harfbuzz-0.9.29/src/hb-version.h.in \
+ $(top_srcdir)/harfbuzz-0.9.30/src/hb-version.h.in \
$(am__dist_check_SCRIPTS_DIST) \
$(top_srcdir)/../../build-aux/depcomp \
$(top_srcdir)/../../build-aux/test-driver ChangeLog \
@@ -501,6 +501,7 @@ am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
+AM_CXXFLAGS = @AM_CXXFLAGS@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
@@ -777,7 +778,7 @@ $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
distclean-hdr:
-rm -f config.h stamp-h1
-hb-version.h: $(top_builddir)/config.status $(top_srcdir)/harfbuzz-0.9.29/src/hb-version.h.in
+hb-version.h: $(top_builddir)/config.status $(top_srcdir)/harfbuzz-0.9.30/src/hb-version.h.in
cd $(top_builddir) && $(SHELL) ./config.status $@
clean-noinstLIBRARIES:
diff --git a/Build/source/libs/harfbuzz/config.h.in b/Build/source/libs/harfbuzz/config.h.in
index 3c0840e14d9..a552483d244 100644
--- a/Build/source/libs/harfbuzz/config.h.in
+++ b/Build/source/libs/harfbuzz/config.h.in
@@ -1,5 +1,8 @@
/* config.h.in. Generated from configure.ac by autoheader. */
+/* The normal alignment of `struct{char;}', in bytes. */
+#undef ALIGNOF_STRUCT_CHAR__
+
/* Define to 1 if you have the `atexit' function. */
#undef HAVE_ATEXIT
diff --git a/Build/source/libs/harfbuzz/configure b/Build/source/libs/harfbuzz/configure
index fc9f93ae1cc..eda4f24019f 100755
--- a/Build/source/libs/harfbuzz/configure
+++ b/Build/source/libs/harfbuzz/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 0.9.29.
+# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 0.9.30.
#
# Report bugs to <tex-k@tug.org>.
#
@@ -580,12 +580,12 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='harfbuzz (TeX Live)'
PACKAGE_TARNAME='harfbuzz--tex-live-'
-PACKAGE_VERSION='0.9.29'
-PACKAGE_STRING='harfbuzz (TeX Live) 0.9.29'
+PACKAGE_VERSION='0.9.30'
+PACKAGE_STRING='harfbuzz (TeX Live) 0.9.30'
PACKAGE_BUGREPORT='tex-k@tug.org'
PACKAGE_URL=''
-ac_unique_file="harfbuzz-0.9.29/src/harfbuzz.pc.in"
+ac_unique_file="harfbuzz-0.9.30/src/harfbuzz.pc.in"
# Factoring default headers for most tests.
ac_includes_default="\
#include <stdio.h>
@@ -629,6 +629,7 @@ LIBOBJS
HARFBUZZ_TREE
build_FALSE
build_TRUE
+AM_CXXFLAGS
EGREP
GREP
CPP
@@ -1324,7 +1325,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures harfbuzz (TeX Live) 0.9.29 to adapt to many kinds of systems.
+\`configure' configures harfbuzz (TeX Live) 0.9.30 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1395,7 +1396,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of harfbuzz (TeX Live) 0.9.29:";;
+ short | recursive ) echo "Configuration of harfbuzz (TeX Live) 0.9.30:";;
esac
cat <<\_ACEOF
@@ -1508,7 +1509,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-harfbuzz (TeX Live) configure 0.9.29
+harfbuzz (TeX Live) configure 0.9.30
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1911,11 +1912,194 @@ $as_echo "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_header_compile
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid; break
+else
+ as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lo=$ac_mid; break
+else
+ as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid
+else
+ as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (($2) < 0)
+ {
+ long int i = longval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%lu", i);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+ ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+ fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by harfbuzz (TeX Live) $as_me 0.9.29, which was
+It was created by harfbuzz (TeX Live) $as_me 0.9.30, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3838,7 +4022,7 @@ fi
# Define the identity of the package.
PACKAGE='harfbuzz--tex-live-'
- VERSION='0.9.29'
+ VERSION='0.9.30'
cat >>confdefs.h <<_ACEOF
@@ -4040,8 +4224,8 @@ WARNING_CFLAGS=$kpse_cv_warning_cflags
HB_VERSION_MAJOR=0
HB_VERSION_MINOR=9
-HB_VERSION_MICRO=29
-HB_VERSION=0.9.29
+HB_VERSION_MICRO=30
+HB_VERSION=0.9.30
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -6348,6 +6532,55 @@ fi
done
+# Compiler flags
+
+# The cast to long int works around a bug in the HP C Compiler,
+# see AC_CHECK_SIZEOF for more information.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of struct{char;}" >&5
+$as_echo_n "checking alignment of struct{char;}... " >&6; }
+if ${ac_cv_alignof_struct_char__+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) offsetof (ac__type_alignof_, y)" "ac_cv_alignof_struct_char__" "$ac_includes_default
+#ifndef offsetof
+# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0)
+#endif
+typedef struct { char x; struct{char;} y; } ac__type_alignof_;"; then :
+
+else
+ if test "$ac_cv_type_struct_char__" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute alignment of struct{char;}
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_alignof_struct_char__=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_struct_char__" >&5
+$as_echo "$ac_cv_alignof_struct_char__" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define ALIGNOF_STRUCT_CHAR__ $ac_cv_alignof_struct_char__
+_ACEOF
+
+
+if test "x$GCC" = "xyes"; then
+ case "$host" in
+ arm-*-*)
+ if test "x$ac_cv_alignof_struct_char__" != x1; then
+ # Request byte alignment
+ AM_CXXFLAGS="-mstructure-size-boundary=8"
+ fi
+ ;;
+ esac
+fi
+
+
ac_config_headers="$ac_config_headers config.h"
@@ -6408,14 +6641,14 @@ $as_echo "#define HAVE_INTEL_ATOMIC_PRIMITIVES 1" >>confdefs.h
fi
-HARFBUZZ_TREE=harfbuzz-0.9.29
+HARFBUZZ_TREE=harfbuzz-0.9.30
if test -f $srcdir/$HARFBUZZ_TREE/src/hb-version.h; then
as_fn_error $? "Sorry, you must remove the file $HARFBUZZ_TREE/src/hb-version.h" "$LINENO" 5
fi
-ac_config_files="$ac_config_files Makefile include/Makefile hb-version.h:harfbuzz-0.9.29/src/hb-version.h.in"
+ac_config_files="$ac_config_files Makefile include/Makefile hb-version.h:harfbuzz-0.9.30/src/hb-version.h.in"
cat >confcache <<\_ACEOF
@@ -6964,7 +7197,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by harfbuzz (TeX Live) $as_me 0.9.29, which was
+This file was extended by harfbuzz (TeX Live) $as_me 0.9.30, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -7030,7 +7263,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-harfbuzz (TeX Live) config.status 0.9.29
+harfbuzz (TeX Live) config.status 0.9.30
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -7163,7 +7396,7 @@ do
"config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
- "hb-version.h") CONFIG_FILES="$CONFIG_FILES hb-version.h:harfbuzz-0.9.29/src/hb-version.h.in" ;;
+ "hb-version.h") CONFIG_FILES="$CONFIG_FILES hb-version.h:harfbuzz-0.9.30/src/hb-version.h.in" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
diff --git a/Build/source/libs/harfbuzz/configure.ac b/Build/source/libs/harfbuzz/configure.ac
index 97e703248fd..75730a222b9 100644
--- a/Build/source/libs/harfbuzz/configure.ac
+++ b/Build/source/libs/harfbuzz/configure.ac
@@ -33,6 +33,21 @@ KPSE_ICU_FLAGS
AC_CHECK_FUNCS([atexit mprotect sysconf getpagesize sched_yield mmap _setmode isatty])
AC_CHECK_HEADERS([unistd.h sys/mman.h sched.h io.h])
+# Compiler flags
+AC_CANONICAL_HOST
+AC_CHECK_ALIGNOF([struct{char;}])
+if test "x$GCC" = "xyes"; then
+ case "$host" in
+ arm-*-*)
+ if test "x$ac_cv_alignof_struct_char__" != x1; then
+ # Request byte alignment
+ AM_CXXFLAGS="-mstructure-size-boundary=8"
+ fi
+ ;;
+ esac
+fi
+AC_SUBST([AM_CXXFLAGS])
+
AC_CONFIG_HEADERS([config.h])
AM_CONDITIONAL([build], [test "x$enable_build" != xno])
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-arabic-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-arabic-table.hh
deleted file mode 100644
index 730a275bf0a..00000000000
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-arabic-table.hh
+++ /dev/null
@@ -1,942 +0,0 @@
-/* == Start of generated table == */
-/*
- * The following table is generated by running:
- *
- * ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt
- *
- * on files with these headers:
- *
- * # ArabicShaping-6.2.0.txt
- * # Date: 2012-05-15, 21:05:00 GMT [KW]
- * UnicodeData.txt does not have a header.
- */
-
-#ifndef HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH
-#define HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH
-
-
-static const uint8_t joining_table[] =
-{
-
- /* Arabic Characters */
-
- JOINING_TYPE_U, /* 0600; ARABIC NUMBER SIGN; U; No_Joining_Group */
- JOINING_TYPE_U, /* 0601; ARABIC SIGN SANAH; U; No_Joining_Group */
- JOINING_TYPE_U, /* 0602; ARABIC FOOTNOTE MARKER; U; No_Joining_Group */
- JOINING_TYPE_U, /* 0603; ARABIC SIGN SAFHA; U; No_Joining_Group */
- JOINING_TYPE_U, /* 0604; ARABIC SIGN SAMVAT; U; No_Joining_Group */
- JOINING_TYPE_X, /* 0605 */
- JOINING_TYPE_X, /* 0606 */
- JOINING_TYPE_X, /* 0607 */
- JOINING_TYPE_U, /* 0608; ARABIC RAY; U; No_Joining_Group */
- JOINING_TYPE_X, /* 0609 */
- JOINING_TYPE_X, /* 060A */
- JOINING_TYPE_U, /* 060B; AFGHANI SIGN; U; No_Joining_Group */
- JOINING_TYPE_X, /* 060C */
- JOINING_TYPE_X, /* 060D */
- JOINING_TYPE_X, /* 060E */
- JOINING_TYPE_X, /* 060F */
- JOINING_TYPE_X, /* 0610 */
- JOINING_TYPE_X, /* 0611 */
- JOINING_TYPE_X, /* 0612 */
- JOINING_TYPE_X, /* 0613 */
- JOINING_TYPE_X, /* 0614 */
- JOINING_TYPE_X, /* 0615 */
- JOINING_TYPE_X, /* 0616 */
- JOINING_TYPE_X, /* 0617 */
- JOINING_TYPE_X, /* 0618 */
- JOINING_TYPE_X, /* 0619 */
- JOINING_TYPE_X, /* 061A */
- JOINING_TYPE_X, /* 061B */
- JOINING_TYPE_X, /* 061C */
- JOINING_TYPE_X, /* 061D */
- JOINING_TYPE_X, /* 061E */
- JOINING_TYPE_X, /* 061F */
- JOINING_TYPE_D, /* 0620; DOTLESS YEH WITH SEPARATE RING BELOW; D; YEH */
- JOINING_TYPE_U, /* 0621; HAMZA; U; No_Joining_Group */
- JOINING_TYPE_R, /* 0622; ALEF WITH MADDA ABOVE; R; ALEF */
- JOINING_TYPE_R, /* 0623; ALEF WITH HAMZA ABOVE; R; ALEF */
- JOINING_TYPE_R, /* 0624; WAW WITH HAMZA ABOVE; R; WAW */
- JOINING_TYPE_R, /* 0625; ALEF WITH HAMZA BELOW; R; ALEF */
- JOINING_TYPE_D, /* 0626; DOTLESS YEH WITH HAMZA ABOVE; D; YEH */
- JOINING_TYPE_R, /* 0627; ALEF; R; ALEF */
- JOINING_TYPE_D, /* 0628; BEH; D; BEH */
- JOINING_TYPE_R, /* 0629; TEH MARBUTA; R; TEH MARBUTA */
- JOINING_TYPE_D, /* 062A; DOTLESS BEH WITH 2 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 062B; DOTLESS BEH WITH 3 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 062C; HAH WITH DOT BELOW; D; HAH */
- JOINING_TYPE_D, /* 062D; HAH; D; HAH */
- JOINING_TYPE_D, /* 062E; HAH WITH DOT ABOVE; D; HAH */
- JOINING_TYPE_R, /* 062F; DAL; R; DAL */
- JOINING_TYPE_R, /* 0630; DAL WITH DOT ABOVE; R; DAL */
- JOINING_TYPE_R, /* 0631; REH; R; REH */
- JOINING_TYPE_R, /* 0632; REH WITH DOT ABOVE; R; REH */
- JOINING_TYPE_D, /* 0633; SEEN; D; SEEN */
- JOINING_TYPE_D, /* 0634; SEEN WITH 3 DOTS ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 0635; SAD; D; SAD */
- JOINING_TYPE_D, /* 0636; SAD WITH DOT ABOVE; D; SAD */
- JOINING_TYPE_D, /* 0637; TAH; D; TAH */
- JOINING_TYPE_D, /* 0638; TAH WITH DOT ABOVE; D; TAH */
- JOINING_TYPE_D, /* 0639; AIN; D; AIN */
- JOINING_TYPE_D, /* 063A; AIN WITH DOT ABOVE; D; AIN */
- JOINING_TYPE_D, /* 063B; KEHEH WITH 2 DOTS ABOVE; D; GAF */
- JOINING_TYPE_D, /* 063C; KEHEH WITH 3 DOTS BELOW; D; GAF */
- JOINING_TYPE_D, /* 063D; FARSI YEH WITH INVERTED V ABOVE; D; FARSI YEH */
- JOINING_TYPE_D, /* 063E; FARSI YEH WITH 2 DOTS ABOVE; D; FARSI YEH */
- JOINING_TYPE_D, /* 063F; FARSI YEH WITH 3 DOTS ABOVE; D; FARSI YEH */
- JOINING_TYPE_C, /* 0640; TATWEEL; C; No_Joining_Group */
- JOINING_TYPE_D, /* 0641; FEH; D; FEH */
- JOINING_TYPE_D, /* 0642; QAF; D; QAF */
- JOINING_TYPE_D, /* 0643; KAF; D; KAF */
- JOINING_TYPE_D, /* 0644; LAM; D; LAM */
- JOINING_TYPE_D, /* 0645; MEEM; D; MEEM */
- JOINING_TYPE_D, /* 0646; NOON; D; NOON */
- JOINING_TYPE_D, /* 0647; HEH; D; HEH */
- JOINING_TYPE_R, /* 0648; WAW; R; WAW */
- JOINING_TYPE_D, /* 0649; DOTLESS YEH; D; YEH */
- JOINING_TYPE_D, /* 064A; YEH; D; YEH */
- JOINING_TYPE_X, /* 064B */
- JOINING_TYPE_X, /* 064C */
- JOINING_TYPE_X, /* 064D */
- JOINING_TYPE_X, /* 064E */
- JOINING_TYPE_X, /* 064F */
- JOINING_TYPE_X, /* 0650 */
- JOINING_TYPE_X, /* 0651 */
- JOINING_TYPE_X, /* 0652 */
- JOINING_TYPE_X, /* 0653 */
- JOINING_TYPE_X, /* 0654 */
- JOINING_TYPE_X, /* 0655 */
- JOINING_TYPE_X, /* 0656 */
- JOINING_TYPE_X, /* 0657 */
- JOINING_TYPE_X, /* 0658 */
- JOINING_TYPE_X, /* 0659 */
- JOINING_TYPE_X, /* 065A */
- JOINING_TYPE_X, /* 065B */
- JOINING_TYPE_X, /* 065C */
- JOINING_TYPE_X, /* 065D */
- JOINING_TYPE_X, /* 065E */
- JOINING_TYPE_X, /* 065F */
- JOINING_TYPE_X, /* 0660 */
- JOINING_TYPE_X, /* 0661 */
- JOINING_TYPE_X, /* 0662 */
- JOINING_TYPE_X, /* 0663 */
- JOINING_TYPE_X, /* 0664 */
- JOINING_TYPE_X, /* 0665 */
- JOINING_TYPE_X, /* 0666 */
- JOINING_TYPE_X, /* 0667 */
- JOINING_TYPE_X, /* 0668 */
- JOINING_TYPE_X, /* 0669 */
- JOINING_TYPE_X, /* 066A */
- JOINING_TYPE_X, /* 066B */
- JOINING_TYPE_X, /* 066C */
- JOINING_TYPE_X, /* 066D */
- JOINING_TYPE_D, /* 066E; DOTLESS BEH; D; BEH */
- JOINING_TYPE_D, /* 066F; DOTLESS QAF; D; QAF */
- JOINING_TYPE_X, /* 0670 */
- JOINING_TYPE_R, /* 0671; ALEF WITH WASLA ABOVE; R; ALEF */
- JOINING_TYPE_R, /* 0672; ALEF WITH WAVY HAMZA ABOVE; R; ALEF */
- JOINING_TYPE_R, /* 0673; ALEF WITH WAVY HAMZA BELOW; R; ALEF */
- JOINING_TYPE_U, /* 0674; HIGH HAMZA; U; No_Joining_Group */
- JOINING_TYPE_R, /* 0675; HIGH HAMZA ALEF; R; ALEF */
- JOINING_TYPE_R, /* 0676; HIGH HAMZA WAW; R; WAW */
- JOINING_TYPE_R, /* 0677; HIGH HAMZA WAW WITH DAMMA ABOVE; R; WAW */
- JOINING_TYPE_D, /* 0678; HIGH HAMZA DOTLESS YEH; D; YEH */
- JOINING_TYPE_D, /* 0679; DOTLESS BEH WITH TAH ABOVE; D; BEH */
- JOINING_TYPE_D, /* 067A; DOTLESS BEH WITH VERTICAL 2 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 067B; DOTLESS BEH WITH VERTICAL 2 DOTS BELOW; D; BEH */
- JOINING_TYPE_D, /* 067C; DOTLESS BEH WITH ATTACHED RING BELOW AND 2 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 067D; DOTLESS BEH WITH INVERTED 3 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 067E; DOTLESS BEH WITH 3 DOTS BELOW; D; BEH */
- JOINING_TYPE_D, /* 067F; DOTLESS BEH WITH 4 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 0680; DOTLESS BEH WITH 4 DOTS BELOW; D; BEH */
- JOINING_TYPE_D, /* 0681; HAH WITH HAMZA ABOVE; D; HAH */
- JOINING_TYPE_D, /* 0682; HAH WITH VERTICAL 2 DOTS ABOVE; D; HAH */
- JOINING_TYPE_D, /* 0683; HAH WITH 2 DOTS BELOW; D; HAH */
- JOINING_TYPE_D, /* 0684; HAH WITH VERTICAL 2 DOTS BELOW; D; HAH */
- JOINING_TYPE_D, /* 0685; HAH WITH 3 DOTS ABOVE; D; HAH */
- JOINING_TYPE_D, /* 0686; HAH WITH 3 DOTS BELOW; D; HAH */
- JOINING_TYPE_D, /* 0687; HAH WITH 4 DOTS BELOW; D; HAH */
- JOINING_TYPE_R, /* 0688; DAL WITH TAH ABOVE; R; DAL */
- JOINING_TYPE_R, /* 0689; DAL WITH ATTACHED RING BELOW; R; DAL */
- JOINING_TYPE_R, /* 068A; DAL WITH DOT BELOW; R; DAL */
- JOINING_TYPE_R, /* 068B; DAL WITH DOT BELOW AND TAH ABOVE; R; DAL */
- JOINING_TYPE_R, /* 068C; DAL WITH 2 DOTS ABOVE; R; DAL */
- JOINING_TYPE_R, /* 068D; DAL WITH 2 DOTS BELOW; R; DAL */
- JOINING_TYPE_R, /* 068E; DAL WITH 3 DOTS ABOVE; R; DAL */
- JOINING_TYPE_R, /* 068F; DAL WITH INVERTED 3 DOTS ABOVE; R; DAL */
- JOINING_TYPE_R, /* 0690; DAL WITH 4 DOTS ABOVE; R; DAL */
- JOINING_TYPE_R, /* 0691; REH WITH TAH ABOVE; R; REH */
- JOINING_TYPE_R, /* 0692; REH WITH V ABOVE; R; REH */
- JOINING_TYPE_R, /* 0693; REH WITH ATTACHED RING BELOW; R; REH */
- JOINING_TYPE_R, /* 0694; REH WITH DOT BELOW; R; REH */
- JOINING_TYPE_R, /* 0695; REH WITH V BELOW; R; REH */
- JOINING_TYPE_R, /* 0696; REH WITH DOT BELOW AND DOT WITHIN; R; REH */
- JOINING_TYPE_R, /* 0697; REH WITH 2 DOTS ABOVE; R; REH */
- JOINING_TYPE_R, /* 0698; REH WITH 3 DOTS ABOVE; R; REH */
- JOINING_TYPE_R, /* 0699; REH WITH 4 DOTS ABOVE; R; REH */
- JOINING_TYPE_D, /* 069A; SEEN WITH DOT BELOW AND DOT ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 069B; SEEN WITH 3 DOTS BELOW; D; SEEN */
- JOINING_TYPE_D, /* 069C; SEEN WITH 3 DOTS BELOW AND 3 DOTS ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 069D; SAD WITH 2 DOTS BELOW; D; SAD */
- JOINING_TYPE_D, /* 069E; SAD WITH 3 DOTS ABOVE; D; SAD */
- JOINING_TYPE_D, /* 069F; TAH WITH 3 DOTS ABOVE; D; TAH */
- JOINING_TYPE_D, /* 06A0; AIN WITH 3 DOTS ABOVE; D; AIN */
- JOINING_TYPE_D, /* 06A1; DOTLESS FEH; D; FEH */
- JOINING_TYPE_D, /* 06A2; DOTLESS FEH WITH DOT BELOW; D; FEH */
- JOINING_TYPE_D, /* 06A3; FEH WITH DOT BELOW; D; FEH */
- JOINING_TYPE_D, /* 06A4; DOTLESS FEH WITH 3 DOTS ABOVE; D; FEH */
- JOINING_TYPE_D, /* 06A5; DOTLESS FEH WITH 3 DOTS BELOW; D; FEH */
- JOINING_TYPE_D, /* 06A6; DOTLESS FEH WITH 4 DOTS ABOVE; D; FEH */
- JOINING_TYPE_D, /* 06A7; DOTLESS QAF WITH DOT ABOVE; D; QAF */
- JOINING_TYPE_D, /* 06A8; DOTLESS QAF WITH 3 DOTS ABOVE; D; QAF */
- JOINING_TYPE_D, /* 06A9; KEHEH; D; GAF */
- JOINING_TYPE_D, /* 06AA; SWASH KAF; D; SWASH KAF */
- JOINING_TYPE_D, /* 06AB; KEHEH WITH ATTACHED RING BELOW; D; GAF */
- JOINING_TYPE_D, /* 06AC; KAF WITH DOT ABOVE; D; KAF */
- JOINING_TYPE_D, /* 06AD; KAF WITH 3 DOTS ABOVE; D; KAF */
- JOINING_TYPE_D, /* 06AE; KAF WITH 3 DOTS BELOW; D; KAF */
- JOINING_TYPE_D, /* 06AF; GAF; D; GAF */
- JOINING_TYPE_D, /* 06B0; GAF WITH ATTACHED RING BELOW; D; GAF */
- JOINING_TYPE_D, /* 06B1; GAF WITH 2 DOTS ABOVE; D; GAF */
- JOINING_TYPE_D, /* 06B2; GAF WITH 2 DOTS BELOW; D; GAF */
- JOINING_TYPE_D, /* 06B3; GAF WITH VERTICAL 2 DOTS BELOW; D; GAF */
- JOINING_TYPE_D, /* 06B4; GAF WITH 3 DOTS ABOVE; D; GAF */
- JOINING_TYPE_D, /* 06B5; LAM WITH V ABOVE; D; LAM */
- JOINING_TYPE_D, /* 06B6; LAM WITH DOT ABOVE; D; LAM */
- JOINING_TYPE_D, /* 06B7; LAM WITH 3 DOTS ABOVE; D; LAM */
- JOINING_TYPE_D, /* 06B8; LAM WITH 3 DOTS BELOW; D; LAM */
- JOINING_TYPE_D, /* 06B9; NOON WITH DOT BELOW; D; NOON */
- JOINING_TYPE_D, /* 06BA; DOTLESS NOON; D; NOON */
- JOINING_TYPE_D, /* 06BB; DOTLESS NOON WITH TAH ABOVE; D; NOON */
- JOINING_TYPE_D, /* 06BC; NOON WITH ATTACHED RING BELOW; D; NOON */
- JOINING_TYPE_D, /* 06BD; NYA; D; NYA */
- JOINING_TYPE_D, /* 06BE; KNOTTED HEH; D; KNOTTED HEH */
- JOINING_TYPE_D, /* 06BF; HAH WITH 3 DOTS BELOW AND DOT ABOVE; D; HAH */
- JOINING_TYPE_R, /* 06C0; DOTLESS TEH MARBUTA WITH HAMZA ABOVE; R; TEH MARBUTA */
- JOINING_TYPE_D, /* 06C1; HEH GOAL; D; HEH GOAL */
- JOINING_TYPE_D, /* 06C2; HEH GOAL WITH HAMZA ABOVE; D; HEH GOAL */
- JOINING_TYPE_R, /* 06C3; TEH MARBUTA GOAL; R; TEH MARBUTA GOAL */
- JOINING_TYPE_R, /* 06C4; WAW WITH ATTACHED RING WITHIN; R; WAW */
- JOINING_TYPE_R, /* 06C5; WAW WITH BAR; R; WAW */
- JOINING_TYPE_R, /* 06C6; WAW WITH V ABOVE; R; WAW */
- JOINING_TYPE_R, /* 06C7; WAW WITH DAMMA ABOVE; R; WAW */
- JOINING_TYPE_R, /* 06C8; WAW WITH ALEF ABOVE; R; WAW */
- JOINING_TYPE_R, /* 06C9; WAW WITH INVERTED V ABOVE; R; WAW */
- JOINING_TYPE_R, /* 06CA; WAW WITH 2 DOTS ABOVE; R; WAW */
- JOINING_TYPE_R, /* 06CB; WAW WITH 3 DOTS ABOVE; R; WAW */
- JOINING_TYPE_D, /* 06CC; FARSI YEH; D; FARSI YEH */
- JOINING_TYPE_R, /* 06CD; YEH WITH TAIL; R; YEH WITH TAIL */
- JOINING_TYPE_D, /* 06CE; FARSI YEH WITH V ABOVE; D; FARSI YEH */
- JOINING_TYPE_R, /* 06CF; WAW WITH DOT ABOVE; R; WAW */
- JOINING_TYPE_D, /* 06D0; DOTLESS YEH WITH VERTICAL 2 DOTS BELOW; D; YEH */
- JOINING_TYPE_D, /* 06D1; DOTLESS YEH WITH 3 DOTS BELOW; D; YEH */
- JOINING_TYPE_R, /* 06D2; YEH BARREE; R; YEH BARREE */
- JOINING_TYPE_R, /* 06D3; YEH BARREE WITH HAMZA ABOVE; R; YEH BARREE */
- JOINING_TYPE_X, /* 06D4 */
- JOINING_TYPE_R, /* 06D5; DOTLESS TEH MARBUTA; R; TEH MARBUTA */
- JOINING_TYPE_X, /* 06D6 */
- JOINING_TYPE_X, /* 06D7 */
- JOINING_TYPE_X, /* 06D8 */
- JOINING_TYPE_X, /* 06D9 */
- JOINING_TYPE_X, /* 06DA */
- JOINING_TYPE_X, /* 06DB */
- JOINING_TYPE_X, /* 06DC */
- JOINING_TYPE_U, /* 06DD; ARABIC END OF AYAH; U; No_Joining_Group */
- JOINING_TYPE_X, /* 06DE */
- JOINING_TYPE_X, /* 06DF */
- JOINING_TYPE_X, /* 06E0 */
- JOINING_TYPE_X, /* 06E1 */
- JOINING_TYPE_X, /* 06E2 */
- JOINING_TYPE_X, /* 06E3 */
- JOINING_TYPE_X, /* 06E4 */
- JOINING_TYPE_X, /* 06E5 */
- JOINING_TYPE_X, /* 06E6 */
- JOINING_TYPE_X, /* 06E7 */
- JOINING_TYPE_X, /* 06E8 */
- JOINING_TYPE_X, /* 06E9 */
- JOINING_TYPE_X, /* 06EA */
- JOINING_TYPE_X, /* 06EB */
- JOINING_TYPE_X, /* 06EC */
- JOINING_TYPE_X, /* 06ED */
- JOINING_TYPE_R, /* 06EE; DAL WITH INVERTED V ABOVE; R; DAL */
- JOINING_TYPE_R, /* 06EF; REH WITH INVERTED V ABOVE; R; REH */
- JOINING_TYPE_X, /* 06F0 */
- JOINING_TYPE_X, /* 06F1 */
- JOINING_TYPE_X, /* 06F2 */
- JOINING_TYPE_X, /* 06F3 */
- JOINING_TYPE_X, /* 06F4 */
- JOINING_TYPE_X, /* 06F5 */
- JOINING_TYPE_X, /* 06F6 */
- JOINING_TYPE_X, /* 06F7 */
- JOINING_TYPE_X, /* 06F8 */
- JOINING_TYPE_X, /* 06F9 */
- JOINING_TYPE_D, /* 06FA; SEEN WITH DOT BELOW AND 3 DOTS ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 06FB; SAD WITH DOT BELOW AND DOT ABOVE; D; SAD */
- JOINING_TYPE_D, /* 06FC; AIN WITH DOT BELOW AND DOT ABOVE; D; AIN */
- JOINING_TYPE_X, /* 06FD */
- JOINING_TYPE_X, /* 06FE */
- JOINING_TYPE_D, /* 06FF; KNOTTED HEH WITH INVERTED V ABOVE; D; KNOTTED HEH */
-
- /* Syriac Characters */
-
- JOINING_TYPE_X, /* 0700 */
- JOINING_TYPE_X, /* 0701 */
- JOINING_TYPE_X, /* 0702 */
- JOINING_TYPE_X, /* 0703 */
- JOINING_TYPE_X, /* 0704 */
- JOINING_TYPE_X, /* 0705 */
- JOINING_TYPE_X, /* 0706 */
- JOINING_TYPE_X, /* 0707 */
- JOINING_TYPE_X, /* 0708 */
- JOINING_TYPE_X, /* 0709 */
- JOINING_TYPE_X, /* 070A */
- JOINING_TYPE_X, /* 070B */
- JOINING_TYPE_X, /* 070C */
- JOINING_TYPE_X, /* 070D */
- JOINING_TYPE_X, /* 070E */
- JOINING_TYPE_X, /* 070F */
- JOINING_GROUP_ALAPH, /* 0710; ALAPH; R; ALAPH */
- JOINING_TYPE_X, /* 0711 */
- JOINING_TYPE_D, /* 0712; BETH; D; BETH */
- JOINING_TYPE_D, /* 0713; GAMAL; D; GAMAL */
- JOINING_TYPE_D, /* 0714; GAMAL GARSHUNI; D; GAMAL */
- JOINING_GROUP_DALATH_RISH, /* 0715; DALATH; R; DALATH RISH */
- JOINING_GROUP_DALATH_RISH, /* 0716; DOTLESS DALATH RISH; R; DALATH RISH */
- JOINING_TYPE_R, /* 0717; HE; R; HE */
- JOINING_TYPE_R, /* 0718; WAW; R; SYRIAC WAW */
- JOINING_TYPE_R, /* 0719; ZAIN; R; ZAIN */
- JOINING_TYPE_D, /* 071A; HETH; D; HETH */
- JOINING_TYPE_D, /* 071B; TETH; D; TETH */
- JOINING_TYPE_D, /* 071C; TETH GARSHUNI; D; TETH */
- JOINING_TYPE_D, /* 071D; YUDH; D; YUDH */
- JOINING_TYPE_R, /* 071E; YUDH HE; R; YUDH HE */
- JOINING_TYPE_D, /* 071F; KAPH; D; KAPH */
- JOINING_TYPE_D, /* 0720; LAMADH; D; LAMADH */
- JOINING_TYPE_D, /* 0721; MIM; D; MIM */
- JOINING_TYPE_D, /* 0722; NUN; D; NUN */
- JOINING_TYPE_D, /* 0723; SEMKATH; D; SEMKATH */
- JOINING_TYPE_D, /* 0724; FINAL SEMKATH; D; FINAL SEMKATH */
- JOINING_TYPE_D, /* 0725; E; D; E */
- JOINING_TYPE_D, /* 0726; PE; D; PE */
- JOINING_TYPE_D, /* 0727; REVERSED PE; D; REVERSED PE */
- JOINING_TYPE_R, /* 0728; SADHE; R; SADHE */
- JOINING_TYPE_D, /* 0729; QAPH; D; QAPH */
- JOINING_GROUP_DALATH_RISH, /* 072A; RISH; R; DALATH RISH */
- JOINING_TYPE_D, /* 072B; SHIN; D; SHIN */
- JOINING_TYPE_R, /* 072C; TAW; R; TAW */
- JOINING_TYPE_D, /* 072D; PERSIAN BHETH; D; BETH */
- JOINING_TYPE_D, /* 072E; PERSIAN GHAMAL; D; GAMAL */
- JOINING_GROUP_DALATH_RISH, /* 072F; PERSIAN DHALATH; R; DALATH RISH */
- JOINING_TYPE_X, /* 0730 */
- JOINING_TYPE_X, /* 0731 */
- JOINING_TYPE_X, /* 0732 */
- JOINING_TYPE_X, /* 0733 */
- JOINING_TYPE_X, /* 0734 */
- JOINING_TYPE_X, /* 0735 */
- JOINING_TYPE_X, /* 0736 */
- JOINING_TYPE_X, /* 0737 */
- JOINING_TYPE_X, /* 0738 */
- JOINING_TYPE_X, /* 0739 */
- JOINING_TYPE_X, /* 073A */
- JOINING_TYPE_X, /* 073B */
- JOINING_TYPE_X, /* 073C */
- JOINING_TYPE_X, /* 073D */
- JOINING_TYPE_X, /* 073E */
- JOINING_TYPE_X, /* 073F */
- JOINING_TYPE_X, /* 0740 */
- JOINING_TYPE_X, /* 0741 */
- JOINING_TYPE_X, /* 0742 */
- JOINING_TYPE_X, /* 0743 */
- JOINING_TYPE_X, /* 0744 */
- JOINING_TYPE_X, /* 0745 */
- JOINING_TYPE_X, /* 0746 */
- JOINING_TYPE_X, /* 0747 */
- JOINING_TYPE_X, /* 0748 */
- JOINING_TYPE_X, /* 0749 */
- JOINING_TYPE_X, /* 074A */
- JOINING_TYPE_X, /* 074B */
- JOINING_TYPE_X, /* 074C */
- JOINING_TYPE_R, /* 074D; SOGDIAN ZHAIN; R; ZHAIN */
- JOINING_TYPE_D, /* 074E; SOGDIAN KHAPH; D; KHAPH */
- JOINING_TYPE_D, /* 074F; SOGDIAN FE; D; FE */
-
- /* Arabic Supplement Characters */
-
- JOINING_TYPE_D, /* 0750; DOTLESS BEH WITH HORIZONTAL 3 DOTS BELOW; D; BEH */
- JOINING_TYPE_D, /* 0751; BEH WITH 3 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 0752; DOTLESS BEH WITH INVERTED 3 DOTS BELOW; D; BEH */
- JOINING_TYPE_D, /* 0753; DOTLESS BEH WITH INVERTED 3 DOTS BELOW AND 2 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 0754; DOTLESS BEH WITH 2 DOTS BELOW AND DOT ABOVE; D; BEH */
- JOINING_TYPE_D, /* 0755; DOTLESS BEH WITH INVERTED V BELOW; D; BEH */
- JOINING_TYPE_D, /* 0756; DOTLESS BEH WITH V ABOVE; D; BEH */
- JOINING_TYPE_D, /* 0757; HAH WITH 2 DOTS ABOVE; D; HAH */
- JOINING_TYPE_D, /* 0758; HAH WITH INVERTED 3 DOTS BELOW; D; HAH */
- JOINING_TYPE_R, /* 0759; DAL WITH VERTICAL 2 DOTS BELOW AND TAH ABOVE; R; DAL */
- JOINING_TYPE_R, /* 075A; DAL WITH INVERTED V BELOW; R; DAL */
- JOINING_TYPE_R, /* 075B; REH WITH BAR; R; REH */
- JOINING_TYPE_D, /* 075C; SEEN WITH 4 DOTS ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 075D; AIN WITH 2 DOTS ABOVE; D; AIN */
- JOINING_TYPE_D, /* 075E; AIN WITH INVERTED 3 DOTS ABOVE; D; AIN */
- JOINING_TYPE_D, /* 075F; AIN WITH VERTICAL 2 DOTS ABOVE; D; AIN */
- JOINING_TYPE_D, /* 0760; DOTLESS FEH WITH 2 DOTS BELOW; D; FEH */
- JOINING_TYPE_D, /* 0761; DOTLESS FEH WITH INVERTED 3 DOTS BELOW; D; FEH */
- JOINING_TYPE_D, /* 0762; KEHEH WITH DOT ABOVE; D; GAF */
- JOINING_TYPE_D, /* 0763; KEHEH WITH 3 DOTS ABOVE; D; GAF */
- JOINING_TYPE_D, /* 0764; KEHEH WITH INVERTED 3 DOTS BELOW; D; GAF */
- JOINING_TYPE_D, /* 0765; MEEM WITH DOT ABOVE; D; MEEM */
- JOINING_TYPE_D, /* 0766; MEEM WITH DOT BELOW; D; MEEM */
- JOINING_TYPE_D, /* 0767; NOON WITH 2 DOTS BELOW; D; NOON */
- JOINING_TYPE_D, /* 0768; NOON WITH TAH ABOVE; D; NOON */
- JOINING_TYPE_D, /* 0769; NOON WITH V ABOVE; D; NOON */
- JOINING_TYPE_D, /* 076A; LAM WITH BAR; D; LAM */
- JOINING_TYPE_R, /* 076B; REH WITH VERTICAL 2 DOTS ABOVE; R; REH */
- JOINING_TYPE_R, /* 076C; REH WITH HAMZA ABOVE; R; REH */
- JOINING_TYPE_D, /* 076D; SEEN WITH VERTICAL 2 DOTS ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 076E; HAH WITH TAH BELOW; D; HAH */
- JOINING_TYPE_D, /* 076F; HAH WITH TAH AND 2 DOTS BELOW; D; HAH */
- JOINING_TYPE_D, /* 0770; SEEN WITH 2 DOTS AND TAH ABOVE; D; SEEN */
- JOINING_TYPE_R, /* 0771; REH WITH 2 DOTS AND TAH ABOVE; R; REH */
- JOINING_TYPE_D, /* 0772; HAH WITH TAH ABOVE; D; HAH */
- JOINING_TYPE_R, /* 0773; ALEF WITH DIGIT TWO ABOVE; R; ALEF */
- JOINING_TYPE_R, /* 0774; ALEF WITH DIGIT THREE ABOVE; R; ALEF */
- JOINING_TYPE_D, /* 0775; FARSI YEH WITH DIGIT TWO ABOVE; D; FARSI YEH */
- JOINING_TYPE_D, /* 0776; FARSI YEH WITH DIGIT THREE ABOVE; D; FARSI YEH */
- JOINING_TYPE_D, /* 0777; DOTLESS YEH WITH DIGIT FOUR BELOW; D; YEH */
- JOINING_TYPE_R, /* 0778; WAW WITH DIGIT TWO ABOVE; R; WAW */
- JOINING_TYPE_R, /* 0779; WAW WITH DIGIT THREE ABOVE; R; WAW */
- JOINING_TYPE_D, /* 077A; BURUSHASKI YEH BARREE WITH DIGIT TWO ABOVE; D; BURUSHASKI YEH BARREE */
- JOINING_TYPE_D, /* 077B; BURUSHASKI YEH BARREE WITH DIGIT THREE ABOVE; D; BURUSHASKI YEH BARREE */
- JOINING_TYPE_D, /* 077C; HAH WITH DIGIT FOUR BELOW; D; HAH */
- JOINING_TYPE_D, /* 077D; SEEN WITH DIGIT FOUR ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 077E; SEEN WITH INVERTED V ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 077F; KAF WITH 2 DOTS ABOVE; D; KAF */
-
- /* N'Ko Characters */
-
- JOINING_TYPE_X, /* 0780 */
- JOINING_TYPE_X, /* 0781 */
- JOINING_TYPE_X, /* 0782 */
- JOINING_TYPE_X, /* 0783 */
- JOINING_TYPE_X, /* 0784 */
- JOINING_TYPE_X, /* 0785 */
- JOINING_TYPE_X, /* 0786 */
- JOINING_TYPE_X, /* 0787 */
- JOINING_TYPE_X, /* 0788 */
- JOINING_TYPE_X, /* 0789 */
- JOINING_TYPE_X, /* 078A */
- JOINING_TYPE_X, /* 078B */
- JOINING_TYPE_X, /* 078C */
- JOINING_TYPE_X, /* 078D */
- JOINING_TYPE_X, /* 078E */
- JOINING_TYPE_X, /* 078F */
- JOINING_TYPE_X, /* 0790 */
- JOINING_TYPE_X, /* 0791 */
- JOINING_TYPE_X, /* 0792 */
- JOINING_TYPE_X, /* 0793 */
- JOINING_TYPE_X, /* 0794 */
- JOINING_TYPE_X, /* 0795 */
- JOINING_TYPE_X, /* 0796 */
- JOINING_TYPE_X, /* 0797 */
- JOINING_TYPE_X, /* 0798 */
- JOINING_TYPE_X, /* 0799 */
- JOINING_TYPE_X, /* 079A */
- JOINING_TYPE_X, /* 079B */
- JOINING_TYPE_X, /* 079C */
- JOINING_TYPE_X, /* 079D */
- JOINING_TYPE_X, /* 079E */
- JOINING_TYPE_X, /* 079F */
- JOINING_TYPE_X, /* 07A0 */
- JOINING_TYPE_X, /* 07A1 */
- JOINING_TYPE_X, /* 07A2 */
- JOINING_TYPE_X, /* 07A3 */
- JOINING_TYPE_X, /* 07A4 */
- JOINING_TYPE_X, /* 07A5 */
- JOINING_TYPE_X, /* 07A6 */
- JOINING_TYPE_X, /* 07A7 */
- JOINING_TYPE_X, /* 07A8 */
- JOINING_TYPE_X, /* 07A9 */
- JOINING_TYPE_X, /* 07AA */
- JOINING_TYPE_X, /* 07AB */
- JOINING_TYPE_X, /* 07AC */
- JOINING_TYPE_X, /* 07AD */
- JOINING_TYPE_X, /* 07AE */
- JOINING_TYPE_X, /* 07AF */
- JOINING_TYPE_X, /* 07B0 */
- JOINING_TYPE_X, /* 07B1 */
- JOINING_TYPE_X, /* 07B2 */
- JOINING_TYPE_X, /* 07B3 */
- JOINING_TYPE_X, /* 07B4 */
- JOINING_TYPE_X, /* 07B5 */
- JOINING_TYPE_X, /* 07B6 */
- JOINING_TYPE_X, /* 07B7 */
- JOINING_TYPE_X, /* 07B8 */
- JOINING_TYPE_X, /* 07B9 */
- JOINING_TYPE_X, /* 07BA */
- JOINING_TYPE_X, /* 07BB */
- JOINING_TYPE_X, /* 07BC */
- JOINING_TYPE_X, /* 07BD */
- JOINING_TYPE_X, /* 07BE */
- JOINING_TYPE_X, /* 07BF */
- JOINING_TYPE_X, /* 07C0 */
- JOINING_TYPE_X, /* 07C1 */
- JOINING_TYPE_X, /* 07C2 */
- JOINING_TYPE_X, /* 07C3 */
- JOINING_TYPE_X, /* 07C4 */
- JOINING_TYPE_X, /* 07C5 */
- JOINING_TYPE_X, /* 07C6 */
- JOINING_TYPE_X, /* 07C7 */
- JOINING_TYPE_X, /* 07C8 */
- JOINING_TYPE_X, /* 07C9 */
- JOINING_TYPE_D, /* 07CA; NKO A; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07CB; NKO EE; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07CC; NKO I; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07CD; NKO E; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07CE; NKO U; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07CF; NKO OO; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D0; NKO O; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D1; NKO DAGBASINNA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D2; NKO N; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D3; NKO BA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D4; NKO PA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D5; NKO TA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D6; NKO JA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D7; NKO CHA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D8; NKO DA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D9; NKO RA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07DA; NKO RRA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07DB; NKO SA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07DC; NKO GBA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07DD; NKO FA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07DE; NKO KA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07DF; NKO LA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E0; NKO NA WOLOSO; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E1; NKO MA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E2; NKO NYA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E3; NKO NA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E4; NKO HA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E5; NKO WA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E6; NKO YA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E7; NKO NYA WOLOSO; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E8; NKO JONA JA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E9; NKO JONA CHA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07EA; NKO JONA RA; D; No_Joining_Group */
- JOINING_TYPE_X, /* 07EB */
- JOINING_TYPE_X, /* 07EC */
- JOINING_TYPE_X, /* 07ED */
- JOINING_TYPE_X, /* 07EE */
- JOINING_TYPE_X, /* 07EF */
- JOINING_TYPE_X, /* 07F0 */
- JOINING_TYPE_X, /* 07F1 */
- JOINING_TYPE_X, /* 07F2 */
- JOINING_TYPE_X, /* 07F3 */
- JOINING_TYPE_X, /* 07F4 */
- JOINING_TYPE_X, /* 07F5 */
- JOINING_TYPE_X, /* 07F6 */
- JOINING_TYPE_X, /* 07F7 */
- JOINING_TYPE_X, /* 07F8 */
- JOINING_TYPE_X, /* 07F9 */
- JOINING_TYPE_C, /* 07FA; NKO LAJANYALAN; C; No_Joining_Group */
-
- /* Mandaic Characters */
-
- JOINING_TYPE_X, /* 07FB */
- JOINING_TYPE_X, /* 07FC */
- JOINING_TYPE_X, /* 07FD */
- JOINING_TYPE_X, /* 07FE */
- JOINING_TYPE_X, /* 07FF */
- JOINING_TYPE_X, /* 0800 */
- JOINING_TYPE_X, /* 0801 */
- JOINING_TYPE_X, /* 0802 */
- JOINING_TYPE_X, /* 0803 */
- JOINING_TYPE_X, /* 0804 */
- JOINING_TYPE_X, /* 0805 */
- JOINING_TYPE_X, /* 0806 */
- JOINING_TYPE_X, /* 0807 */
- JOINING_TYPE_X, /* 0808 */
- JOINING_TYPE_X, /* 0809 */
- JOINING_TYPE_X, /* 080A */
- JOINING_TYPE_X, /* 080B */
- JOINING_TYPE_X, /* 080C */
- JOINING_TYPE_X, /* 080D */
- JOINING_TYPE_X, /* 080E */
- JOINING_TYPE_X, /* 080F */
- JOINING_TYPE_X, /* 0810 */
- JOINING_TYPE_X, /* 0811 */
- JOINING_TYPE_X, /* 0812 */
- JOINING_TYPE_X, /* 0813 */
- JOINING_TYPE_X, /* 0814 */
- JOINING_TYPE_X, /* 0815 */
- JOINING_TYPE_X, /* 0816 */
- JOINING_TYPE_X, /* 0817 */
- JOINING_TYPE_X, /* 0818 */
- JOINING_TYPE_X, /* 0819 */
- JOINING_TYPE_X, /* 081A */
- JOINING_TYPE_X, /* 081B */
- JOINING_TYPE_X, /* 081C */
- JOINING_TYPE_X, /* 081D */
- JOINING_TYPE_X, /* 081E */
- JOINING_TYPE_X, /* 081F */
- JOINING_TYPE_X, /* 0820 */
- JOINING_TYPE_X, /* 0821 */
- JOINING_TYPE_X, /* 0822 */
- JOINING_TYPE_X, /* 0823 */
- JOINING_TYPE_X, /* 0824 */
- JOINING_TYPE_X, /* 0825 */
- JOINING_TYPE_X, /* 0826 */
- JOINING_TYPE_X, /* 0827 */
- JOINING_TYPE_X, /* 0828 */
- JOINING_TYPE_X, /* 0829 */
- JOINING_TYPE_X, /* 082A */
- JOINING_TYPE_X, /* 082B */
- JOINING_TYPE_X, /* 082C */
- JOINING_TYPE_X, /* 082D */
- JOINING_TYPE_X, /* 082E */
- JOINING_TYPE_X, /* 082F */
- JOINING_TYPE_X, /* 0830 */
- JOINING_TYPE_X, /* 0831 */
- JOINING_TYPE_X, /* 0832 */
- JOINING_TYPE_X, /* 0833 */
- JOINING_TYPE_X, /* 0834 */
- JOINING_TYPE_X, /* 0835 */
- JOINING_TYPE_X, /* 0836 */
- JOINING_TYPE_X, /* 0837 */
- JOINING_TYPE_X, /* 0838 */
- JOINING_TYPE_X, /* 0839 */
- JOINING_TYPE_X, /* 083A */
- JOINING_TYPE_X, /* 083B */
- JOINING_TYPE_X, /* 083C */
- JOINING_TYPE_X, /* 083D */
- JOINING_TYPE_X, /* 083E */
- JOINING_TYPE_X, /* 083F */
- JOINING_TYPE_R, /* 0840; MANDAIC HALQA; R; No_Joining_Group */
- JOINING_TYPE_D, /* 0841; MANDAIC AB; D; No_Joining_Group */
- JOINING_TYPE_D, /* 0842; MANDAIC AG; D; No_Joining_Group */
- JOINING_TYPE_D, /* 0843; MANDAIC AD; D; No_Joining_Group */
- JOINING_TYPE_D, /* 0844; MANDAIC AH; D; No_Joining_Group */
- JOINING_TYPE_D, /* 0845; MANDAIC USHENNA; D; No_Joining_Group */
- JOINING_TYPE_R, /* 0846; MANDAIC AZ; R; No_Joining_Group */
- JOINING_TYPE_D, /* 0847; MANDAIC IT; D; No_Joining_Group */
- JOINING_TYPE_D, /* 0848; MANDAIC ATT; D; No_Joining_Group */
- JOINING_TYPE_R, /* 0849; MANDAIC AKSA; R; No_Joining_Group */
- JOINING_TYPE_D, /* 084A; MANDAIC AK; D; No_Joining_Group */
- JOINING_TYPE_D, /* 084B; MANDAIC AL; D; No_Joining_Group */
- JOINING_TYPE_D, /* 084C; MANDAIC AM; D; No_Joining_Group */
- JOINING_TYPE_D, /* 084D; MANDAIC AN; D; No_Joining_Group */
- JOINING_TYPE_D, /* 084E; MANDAIC AS; D; No_Joining_Group */
- JOINING_TYPE_R, /* 084F; MANDAIC IN; R; No_Joining_Group */
- JOINING_TYPE_D, /* 0850; MANDAIC AP; D; No_Joining_Group */
- JOINING_TYPE_D, /* 0851; MANDAIC ASZ; D; No_Joining_Group */
- JOINING_TYPE_D, /* 0852; MANDAIC AQ; D; No_Joining_Group */
- JOINING_TYPE_D, /* 0853; MANDAIC AR; D; No_Joining_Group */
- JOINING_TYPE_R, /* 0854; MANDAIC ASH; R; No_Joining_Group */
- JOINING_TYPE_D, /* 0855; MANDAIC AT; D; No_Joining_Group */
- JOINING_TYPE_U, /* 0856; MANDAIC DUSHENNA; U; No_Joining_Group */
- JOINING_TYPE_U, /* 0857; MANDAIC KAD; U; No_Joining_Group */
- JOINING_TYPE_U, /* 0858; MANDAIC AIN; U; No_Joining_Group */
-
- /* Arabic Extended-A Characters */
-
- JOINING_TYPE_X, /* 0859 */
- JOINING_TYPE_X, /* 085A */
- JOINING_TYPE_X, /* 085B */
- JOINING_TYPE_X, /* 085C */
- JOINING_TYPE_X, /* 085D */
- JOINING_TYPE_X, /* 085E */
- JOINING_TYPE_X, /* 085F */
- JOINING_TYPE_X, /* 0860 */
- JOINING_TYPE_X, /* 0861 */
- JOINING_TYPE_X, /* 0862 */
- JOINING_TYPE_X, /* 0863 */
- JOINING_TYPE_X, /* 0864 */
- JOINING_TYPE_X, /* 0865 */
- JOINING_TYPE_X, /* 0866 */
- JOINING_TYPE_X, /* 0867 */
- JOINING_TYPE_X, /* 0868 */
- JOINING_TYPE_X, /* 0869 */
- JOINING_TYPE_X, /* 086A */
- JOINING_TYPE_X, /* 086B */
- JOINING_TYPE_X, /* 086C */
- JOINING_TYPE_X, /* 086D */
- JOINING_TYPE_X, /* 086E */
- JOINING_TYPE_X, /* 086F */
- JOINING_TYPE_X, /* 0870 */
- JOINING_TYPE_X, /* 0871 */
- JOINING_TYPE_X, /* 0872 */
- JOINING_TYPE_X, /* 0873 */
- JOINING_TYPE_X, /* 0874 */
- JOINING_TYPE_X, /* 0875 */
- JOINING_TYPE_X, /* 0876 */
- JOINING_TYPE_X, /* 0877 */
- JOINING_TYPE_X, /* 0878 */
- JOINING_TYPE_X, /* 0879 */
- JOINING_TYPE_X, /* 087A */
- JOINING_TYPE_X, /* 087B */
- JOINING_TYPE_X, /* 087C */
- JOINING_TYPE_X, /* 087D */
- JOINING_TYPE_X, /* 087E */
- JOINING_TYPE_X, /* 087F */
- JOINING_TYPE_X, /* 0880 */
- JOINING_TYPE_X, /* 0881 */
- JOINING_TYPE_X, /* 0882 */
- JOINING_TYPE_X, /* 0883 */
- JOINING_TYPE_X, /* 0884 */
- JOINING_TYPE_X, /* 0885 */
- JOINING_TYPE_X, /* 0886 */
- JOINING_TYPE_X, /* 0887 */
- JOINING_TYPE_X, /* 0888 */
- JOINING_TYPE_X, /* 0889 */
- JOINING_TYPE_X, /* 088A */
- JOINING_TYPE_X, /* 088B */
- JOINING_TYPE_X, /* 088C */
- JOINING_TYPE_X, /* 088D */
- JOINING_TYPE_X, /* 088E */
- JOINING_TYPE_X, /* 088F */
- JOINING_TYPE_X, /* 0890 */
- JOINING_TYPE_X, /* 0891 */
- JOINING_TYPE_X, /* 0892 */
- JOINING_TYPE_X, /* 0893 */
- JOINING_TYPE_X, /* 0894 */
- JOINING_TYPE_X, /* 0895 */
- JOINING_TYPE_X, /* 0896 */
- JOINING_TYPE_X, /* 0897 */
- JOINING_TYPE_X, /* 0898 */
- JOINING_TYPE_X, /* 0899 */
- JOINING_TYPE_X, /* 089A */
- JOINING_TYPE_X, /* 089B */
- JOINING_TYPE_X, /* 089C */
- JOINING_TYPE_X, /* 089D */
- JOINING_TYPE_X, /* 089E */
- JOINING_TYPE_X, /* 089F */
- JOINING_TYPE_D, /* 08A0; DOTLESS BEH WITH V BELOW; D; BEH */
- JOINING_TYPE_X, /* 08A1 */
- JOINING_TYPE_D, /* 08A2; HAH WITH DOT BELOW AND 2 DOTS ABOVE; D; HAH */
- JOINING_TYPE_D, /* 08A3; TAH WITH 2 DOTS ABOVE; D; TAH */
- JOINING_TYPE_D, /* 08A4; DOTLESS FEH WITH DOT BELOW AND 3 DOTS ABOVE; D; FEH */
- JOINING_TYPE_D, /* 08A5; QAF WITH DOT BELOW; D; QAF */
- JOINING_TYPE_D, /* 08A6; LAM WITH DOUBLE BAR; D; LAM */
- JOINING_TYPE_D, /* 08A7; MEEM WITH 3 DOTS ABOVE; D; MEEM */
- JOINING_TYPE_D, /* 08A8; YEH WITH HAMZA ABOVE; D; YEH */
- JOINING_TYPE_D, /* 08A9; YEH WITH DOT ABOVE; D; YEH */
- JOINING_TYPE_R, /* 08AA; REH WITH LOOP; R; REH */
- JOINING_TYPE_R, /* 08AB; WAW WITH DOT WITHIN; R; WAW */
- JOINING_TYPE_R, /* 08AC; ROHINGYA YEH; R; ROHINGYA YEH */
-
-};
-
-#define JOINING_TABLE_FIRST 0x0600
-#define JOINING_TABLE_LAST 0x08AC
-
-
-static const uint16_t shaping_table[][4] =
-{
- {0x0000, 0x0000, 0x0000, 0xFE80}, /* U+0621 ARABIC LETTER HAMZA ISOLATED FORM */
- {0x0000, 0x0000, 0xFE82, 0xFE81}, /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */
- {0x0000, 0x0000, 0xFE84, 0xFE83}, /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */
- {0x0000, 0x0000, 0xFE86, 0xFE85}, /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */
- {0x0000, 0x0000, 0xFE88, 0xFE87}, /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */
- {0xFE8B, 0xFE8C, 0xFE8A, 0xFE89}, /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */
- {0x0000, 0x0000, 0xFE8E, 0xFE8D}, /* U+0627 ARABIC LETTER ALEF */
- {0xFE91, 0xFE92, 0xFE90, 0xFE8F}, /* U+0628 ARABIC LETTER BEH */
- {0x0000, 0x0000, 0xFE94, 0xFE93}, /* U+0629 ARABIC LETTER TEH MARBUTA */
- {0xFE97, 0xFE98, 0xFE96, 0xFE95}, /* U+062A ARABIC LETTER TEH */
- {0xFE9B, 0xFE9C, 0xFE9A, 0xFE99}, /* U+062B ARABIC LETTER THEH */
- {0xFE9F, 0xFEA0, 0xFE9E, 0xFE9D}, /* U+062C ARABIC LETTER JEEM */
- {0xFEA3, 0xFEA4, 0xFEA2, 0xFEA1}, /* U+062D ARABIC LETTER HAH */
- {0xFEA7, 0xFEA8, 0xFEA6, 0xFEA5}, /* U+062E ARABIC LETTER KHAH */
- {0x0000, 0x0000, 0xFEAA, 0xFEA9}, /* U+062F ARABIC LETTER DAL */
- {0x0000, 0x0000, 0xFEAC, 0xFEAB}, /* U+0630 ARABIC LETTER THAL */
- {0x0000, 0x0000, 0xFEAE, 0xFEAD}, /* U+0631 ARABIC LETTER REH */
- {0x0000, 0x0000, 0xFEB0, 0xFEAF}, /* U+0632 ARABIC LETTER ZAIN */
- {0xFEB3, 0xFEB4, 0xFEB2, 0xFEB1}, /* U+0633 ARABIC LETTER SEEN */
- {0xFEB7, 0xFEB8, 0xFEB6, 0xFEB5}, /* U+0634 ARABIC LETTER SHEEN */
- {0xFEBB, 0xFEBC, 0xFEBA, 0xFEB9}, /* U+0635 ARABIC LETTER SAD */
- {0xFEBF, 0xFEC0, 0xFEBE, 0xFEBD}, /* U+0636 ARABIC LETTER DAD */
- {0xFEC3, 0xFEC4, 0xFEC2, 0xFEC1}, /* U+0637 ARABIC LETTER TAH */
- {0xFEC7, 0xFEC8, 0xFEC6, 0xFEC5}, /* U+0638 ARABIC LETTER ZAH */
- {0xFECB, 0xFECC, 0xFECA, 0xFEC9}, /* U+0639 ARABIC LETTER AIN */
- {0xFECF, 0xFED0, 0xFECE, 0xFECD}, /* U+063A ARABIC LETTER GHAIN */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063B */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063C */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063D */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063E */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063F */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0640 */
- {0xFED3, 0xFED4, 0xFED2, 0xFED1}, /* U+0641 ARABIC LETTER FEH */
- {0xFED7, 0xFED8, 0xFED6, 0xFED5}, /* U+0642 ARABIC LETTER QAF */
- {0xFEDB, 0xFEDC, 0xFEDA, 0xFED9}, /* U+0643 ARABIC LETTER KAF */
- {0xFEDF, 0xFEE0, 0xFEDE, 0xFEDD}, /* U+0644 ARABIC LETTER LAM */
- {0xFEE3, 0xFEE4, 0xFEE2, 0xFEE1}, /* U+0645 ARABIC LETTER MEEM */
- {0xFEE7, 0xFEE8, 0xFEE6, 0xFEE5}, /* U+0646 ARABIC LETTER NOON */
- {0xFEEB, 0xFEEC, 0xFEEA, 0xFEE9}, /* U+0647 ARABIC LETTER HEH */
- {0x0000, 0x0000, 0xFEEE, 0xFEED}, /* U+0648 ARABIC LETTER WAW */
- {0xFBE8, 0xFBE9, 0xFEF0, 0xFEEF}, /* U+0649 ARABIC LETTER */
- {0xFEF3, 0xFEF4, 0xFEF2, 0xFEF1}, /* U+064A ARABIC LETTER YEH */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064B */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064C */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064D */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064E */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064F */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0650 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0651 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0652 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0653 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0654 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0655 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0656 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0657 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0658 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0659 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065A */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065B */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065C */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065D */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065E */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065F */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0660 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0661 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0662 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0663 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0664 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0665 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0666 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0667 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0668 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0669 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066A */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066B */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066C */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066D */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066E */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066F */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0670 */
- {0x0000, 0x0000, 0xFB51, 0xFB50}, /* U+0671 ARABIC LETTER ALEF WASLA */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0672 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0673 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0674 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0675 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0676 */
- {0x0000, 0x0000, 0x0000, 0xFBDD}, /* U+0677 ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0678 */
- {0xFB68, 0xFB69, 0xFB67, 0xFB66}, /* U+0679 ARABIC LETTER TTEH */
- {0xFB60, 0xFB61, 0xFB5F, 0xFB5E}, /* U+067A ARABIC LETTER TTEHEH */
- {0xFB54, 0xFB55, 0xFB53, 0xFB52}, /* U+067B ARABIC LETTER BEEH */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+067C */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+067D */
- {0xFB58, 0xFB59, 0xFB57, 0xFB56}, /* U+067E ARABIC LETTER PEH */
- {0xFB64, 0xFB65, 0xFB63, 0xFB62}, /* U+067F ARABIC LETTER TEHEH */
- {0xFB5C, 0xFB5D, 0xFB5B, 0xFB5A}, /* U+0680 ARABIC LETTER BEHEH */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0681 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0682 */
- {0xFB78, 0xFB79, 0xFB77, 0xFB76}, /* U+0683 ARABIC LETTER NYEH */
- {0xFB74, 0xFB75, 0xFB73, 0xFB72}, /* U+0684 ARABIC LETTER DYEH */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0685 */
- {0xFB7C, 0xFB7D, 0xFB7B, 0xFB7A}, /* U+0686 ARABIC LETTER TCHEH */
- {0xFB80, 0xFB81, 0xFB7F, 0xFB7E}, /* U+0687 ARABIC LETTER TCHEHEH */
- {0x0000, 0x0000, 0xFB89, 0xFB88}, /* U+0688 ARABIC LETTER DDAL */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0689 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+068A */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+068B */
- {0x0000, 0x0000, 0xFB85, 0xFB84}, /* U+068C ARABIC LETTER DAHAL */
- {0x0000, 0x0000, 0xFB83, 0xFB82}, /* U+068D ARABIC LETTER DDAHAL */
- {0x0000, 0x0000, 0xFB87, 0xFB86}, /* U+068E ARABIC LETTER DUL */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+068F */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0690 */
- {0x0000, 0x0000, 0xFB8D, 0xFB8C}, /* U+0691 ARABIC LETTER RREH */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0692 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0693 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0694 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0695 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0696 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0697 */
- {0x0000, 0x0000, 0xFB8B, 0xFB8A}, /* U+0698 ARABIC LETTER JEH */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0699 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069A */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069B */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069C */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069D */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069E */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069F */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A0 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A1 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A2 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A3 */
- {0xFB6C, 0xFB6D, 0xFB6B, 0xFB6A}, /* U+06A4 ARABIC LETTER VEH */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A5 */
- {0xFB70, 0xFB71, 0xFB6F, 0xFB6E}, /* U+06A6 ARABIC LETTER PEHEH */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A7 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A8 */
- {0xFB90, 0xFB91, 0xFB8F, 0xFB8E}, /* U+06A9 ARABIC LETTER KEHEH */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AA */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AB */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AC */
- {0xFBD5, 0xFBD6, 0xFBD4, 0xFBD3}, /* U+06AD ARABIC LETTER NG */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AE */
- {0xFB94, 0xFB95, 0xFB93, 0xFB92}, /* U+06AF ARABIC LETTER GAF */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B0 */
- {0xFB9C, 0xFB9D, 0xFB9B, 0xFB9A}, /* U+06B1 ARABIC LETTER NGOEH */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B2 */
- {0xFB98, 0xFB99, 0xFB97, 0xFB96}, /* U+06B3 ARABIC LETTER GUEH */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B4 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B5 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B6 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B7 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B8 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B9 */
- {0x0000, 0x0000, 0xFB9F, 0xFB9E}, /* U+06BA ARABIC LETTER NOON GHUNNA */
- {0xFBA2, 0xFBA3, 0xFBA1, 0xFBA0}, /* U+06BB ARABIC LETTER RNOON */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BC */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BD */
- {0xFBAC, 0xFBAD, 0xFBAB, 0xFBAA}, /* U+06BE ARABIC LETTER HEH DOACHASHMEE */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BF */
- {0x0000, 0x0000, 0xFBA5, 0xFBA4}, /* U+06C0 ARABIC LETTER HEH WITH YEH ABOVE */
- {0xFBA8, 0xFBA9, 0xFBA7, 0xFBA6}, /* U+06C1 ARABIC LETTER HEH GOAL */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C2 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C3 */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C4 */
- {0x0000, 0x0000, 0xFBE1, 0xFBE0}, /* U+06C5 ARABIC LETTER KIRGHIZ OE */
- {0x0000, 0x0000, 0xFBDA, 0xFBD9}, /* U+06C6 ARABIC LETTER OE */
- {0x0000, 0x0000, 0xFBD8, 0xFBD7}, /* U+06C7 ARABIC LETTER U */
- {0x0000, 0x0000, 0xFBDC, 0xFBDB}, /* U+06C8 ARABIC LETTER YU */
- {0x0000, 0x0000, 0xFBE3, 0xFBE2}, /* U+06C9 ARABIC LETTER KIRGHIZ YU */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CA */
- {0x0000, 0x0000, 0xFBDF, 0xFBDE}, /* U+06CB ARABIC LETTER VE */
- {0xFBFE, 0xFBFF, 0xFBFD, 0xFBFC}, /* U+06CC ARABIC LETTER FARSI YEH */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CD */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CE */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CF */
- {0xFBE6, 0xFBE7, 0xFBE5, 0xFBE4}, /* U+06D0 ARABIC LETTER E */
- {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06D1 */
- {0x0000, 0x0000, 0xFBAF, 0xFBAE}, /* U+06D2 ARABIC LETTER YEH BARREE */
- {0x0000, 0x0000, 0xFBB1, 0xFBB0}, /* U+06D3 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE */
-};
-
-#define SHAPING_TABLE_FIRST 0x0621
-#define SHAPING_TABLE_LAST 0x06D3
-
-
-static const struct ligature_set_t {
- uint16_t first;
- struct ligature_pairs_t {
- uint16_t second;
- uint16_t ligature;
- } ligatures[4];
-} ligature_table[] =
-{
- { 0xFEDF, {
- { 0xFE88, 0xFEF9 }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM */
- { 0xFE82, 0xFEF5 }, /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM */
- { 0xFE8E, 0xFEFB }, /* ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM */
- { 0xFE84, 0xFEF7 }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM */
- }},
- { 0xFEE0, {
- { 0xFE88, 0xFEFA }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM */
- { 0xFE82, 0xFEF6 }, /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM */
- { 0xFE8E, 0xFEFC }, /* ARABIC LIGATURE LAM WITH ALEF FINAL FORM */
- { 0xFE84, 0xFEF8 }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM */
- }},
-};
-
-
-#endif /* HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH */
-
-/* == End of generated table == */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29-PATCHES/ChangeLog b/Build/source/libs/harfbuzz/harfbuzz-0.9.30-PATCHES/ChangeLog
index ae6fb04efdd..d468c1c50ff 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29-PATCHES/ChangeLog
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30-PATCHES/ChangeLog
@@ -1,3 +1,10 @@
+2014-07-10 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ Imported harfbuzz-0.9.30 source tree from:
+ http://www.freedesktop.org/software/harfbuzz/release/
+
+ * patch-01-cygwin: Adapted.
+
2014-06-23 Peter Breitenlohner <peb@mppmu.mpg.de>
* patch-01-cygwin (new): Avoid 'not supported' warnings.
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29-PATCHES/TL-Changes b/Build/source/libs/harfbuzz/harfbuzz-0.9.30-PATCHES/TL-Changes
index c004b338705..78dc71a9302 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29-PATCHES/TL-Changes
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30-PATCHES/TL-Changes
@@ -1,4 +1,4 @@
-Changes applied to the harfbuzz-0.9.29/ tree as obtained from:
+Changes applied to the harfbuzz-0.9.30/ tree as obtained from:
http://www.freedesktop.org/software/harfbuzz/release/
Removed:
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29-PATCHES/patch-01-cygwin b/Build/source/libs/harfbuzz/harfbuzz-0.9.30-PATCHES/patch-01-cygwin
index bd6a81f4c32..211d79cda2a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29-PATCHES/patch-01-cygwin
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30-PATCHES/patch-01-cygwin
@@ -1,7 +1,7 @@
-diff -ur harfbuzz-0.9.29.orig/src/hb-private.hh harfbuzz-0.9.29/src/hb-private.hh
---- harfbuzz-0.9.29.orig/src/hb-private.hh 2014-05-08 23:54:36.000000000 +0200
-+++ harfbuzz-0.9.29/src/hb-private.hh 2014-06-23 19:09:17.000000000 +0200
-@@ -179,7 +179,7 @@
+diff -ur harfbuzz-0.9.30.orig/src/hb-private.hh harfbuzz-0.9.30/src/hb-private.hh
+--- harfbuzz-0.9.30.orig/src/hb-private.hh 2014-06-27 21:17:01.000000000 +0200
++++ harfbuzz-0.9.30/src/hb-private.hh 2014-07-10 08:37:35.000000000 +0200
+@@ -87,7 +87,7 @@
#endif
#ifndef HB_INTERNAL
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/AUTHORS b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/AUTHORS
index c611d7d4769..81cdc4cf37f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/AUTHORS
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/AUTHORS
@@ -4,5 +4,6 @@ Martin Hosken
Jonathan Kew
Lars Knoll
Werner Lemberg
+Roozbeh Pournader
Owen Taylor
David Turner
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/Android.mk b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/Android.mk
index 757d136e509..610b40ab4b0 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/Android.mk
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/Android.mk
@@ -21,7 +21,6 @@ HARFBUZZ_SRC_FILES = \
src/hb-buffer-serialize.cc \
src/hb-buffer.cc \
src/hb-common.cc \
- src/hb-fallback-shape.cc \
src/hb-face.cc \
src/hb-font.cc \
src/hb-ot-tag.cc \
@@ -29,77 +28,64 @@ HARFBUZZ_SRC_FILES = \
src/hb-shape.cc \
src/hb-shape-plan.cc \
src/hb-shaper.cc \
- src/hb-tt-font.cc \
src/hb-unicode.cc \
src/hb-warning.cc \
+ src/hb-ot-font.cc \
src/hb-ot-layout.cc \
src/hb-ot-map.cc \
src/hb-ot-shape.cc \
src/hb-ot-shape-complex-arabic.cc \
src/hb-ot-shape-complex-default.cc \
+ src/hb-ot-shape-complex-hangul.cc \
+ src/hb-ot-shape-complex-hebrew.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-complex-tibetan.cc \
src/hb-ot-shape-normalize.cc \
- src/hb-ot-shape-fallback.cc
+ src/hb-ot-shape-fallback.cc \
+ $(NULL)
#############################################################
-# build the harfbuzz library
+# build the harfbuzz shared library
#
-
include $(CLEAR_VARS)
-
LOCAL_ARM_MODE := arm
-
LOCAL_MODULE_TAGS := optional
-
LOCAL_SRC_FILES:= \
$(HARFBUZZ_SRC_FILES) \
src/hb-icu.cc
-
LOCAL_CPP_EXTENSION := .cc
-
LOCAL_SHARED_LIBRARIES := \
libcutils \
libicuuc \
libicui18n \
libutils
-
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/src \
external/icu4c/common
-
LOCAL_CFLAGS += -DHB_NO_MT -DHAVE_OT -DHAVE_ICU
-
-LOCAL_LDLIBS += -lpthread
-
LOCAL_MODULE:= libharfbuzz_ng
-
include $(BUILD_SHARED_LIBRARY)
#############################################################
# build the harfbuzz static library
#
include $(CLEAR_VARS)
-
LOCAL_ARM_MODE := arm
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES:= \
$(HARFBUZZ_SRC_FILES) \
src/hb-ucdn.cc \
src/hb-ucdn/ucdn.c
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_STATIC_LIBRARIES := libft2
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/src \
- external/freetype/include
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_STATIC_LIBRARIES := libft2
+LOCAL_C_INCLUDES += \
+ $(LOCAL_PATH)/src \
+ external/freetype/include
LOCAL_CFLAGS += -DHB_NO_MT -DHAVE_OT -DHAVE_UCDN -DHAVE_FREETYPE
-LOCAL_LDLIBS += -lpthread
-
LOCAL_MODULE:= libharfbuzz_ng
include $(BUILD_STATIC_LIBRARY)
-
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/ChangeLog b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/ChangeLog
index b845aba673a..37d59ffef05 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/ChangeLog
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/ChangeLog
@@ -1,3 +1,1077 @@
+commit ea001374b86c4f1b24246c08a3d66d2a0e95a827
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jul 9 17:28:43 2014 -0400
+
+ 0.9.30
+
+ NEWS | 17 +++++++++++++++++
+ configure.ac | 2 +-
+ 2 files changed, 18 insertions(+), 1 deletion(-)
+
+commit 8b16ff12590200afb08e8821e3f14d2fdf8efbda
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jul 9 17:40:52 2014 -0400
+
+ [uniscribe] Fix build after recent changes to Offset
+
+ src/hb-ot-name-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 73f7f8919ea1f09b8c5b29f231ac84105cde2145
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jul 9 17:17:18 2014 -0400
+
+ Define _POSIX_C_SOURCE only if it is not defined
+
+ Fixes https://github.com/behdad/harfbuzz/pull/45
+
+ src/hb-blob.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 6bd5646f1b865a76304a67e03a6161afcfef293f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jul 9 17:07:06 2014 -0400
+
+ [tests] Remove bash'ish
+
+ Apparently on travis-ci, bash is linked to dash, which doesn't
+ understand "let". Failing tests were not being noticed. See eg:
+
+ https://travis-ci.org/behdad/harfbuzz/jobs/29544211
+
+ Don't rely on bash.
+
+ test/shaping/run-tests.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 0afedaa96c81b63774a4a0ef9b4cb4995d24ec9e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jul 9 17:00:48 2014 -0400
+
+ [util/hb-shape] Fix crash; oops
+
+ util/hb-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0cd94491b99aed438ad79a55cdfced8d1b657179
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jul 9 16:51:38 2014 -0400
+
+ [ucdn] Update to Unicode 7.0.0 data
+
+ From http://github.com/behdad/ucdn
+
+ src/hb-ucdn.cc | 23 +
+ src/hb-ucdn/README | 1 +
+ src/hb-ucdn/ucdn.c | 2 +-
+ src/hb-ucdn/ucdn.h | 27 +
+ src/hb-ucdn/unicodedata_db.h | 3711
+ ++++++++++++++++++++++--------------------
+ 5 files changed, 2039 insertions(+), 1725 deletions(-)
+
+commit 9d4ede3a97fff544a5ec2a671e49a92a79645b61
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jul 9 16:19:55 2014 -0400
+
+ [Android.mk] Update source list
+
+ Android.mk | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+commit 7e1ab1f6d812a55f75d4844f7981d5604481049c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jul 9 16:13:40 2014 -0400
+
+ [Android.mk] Whitespace
+
+ Android.mk | 26 ++++++--------------------
+ 1 file changed, 6 insertions(+), 20 deletions(-)
+
+commit 5c6695c42470e0a15e9029ebe8ecbebf3fa4f95b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jul 9 16:07:12 2014 -0400
+
+ [Android.mk] Remove -lpthread; we build with -DHB_NO_MT
+
+ Android.mk | 3 ---
+ 1 file changed, 3 deletions(-)
+
+commit 9109f1e944dd4bd4ae8057b75c8a31e9d31797aa
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jul 8 20:02:29 2014 -0400
+
+ [util/hb-shape] Accept an empty output-format that would skip output
+
+ Useful for benchmarking, to avoid buffer serialization overhead (which
+ seems to by far dominate shaping!)
+
+ util/hb-shape.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 8656408572c2685f278a3b742ee69c767c29788c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jul 8 18:10:20 2014 -0400
+
+ [util] Fix hb-view rendering with --font-funcs=ot
+
+ util/helper-cairo.cc | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+commit 8650def73500204b79c651f58b1be3f94a41973d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Jul 5 15:50:18 2014 -0400
+
+ [util] Add option to set font function implementation to use
+
+ Supports ft and ot right now. hb-view currently not rendering
+ with ot.
+ Will fix after some clean up.
+
+ util/options.cc | 76
+ ++++++++++++++++++++++++++++++++++++++++++++++++++-------
+ util/options.hh | 21 ++++++++++++++++
+ 2 files changed, 88 insertions(+), 9 deletions(-)
+
+commit 2306ad46dce1c53b0b1bfabdc04d70e3b99eabb7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jul 4 18:09:29 2014 -0400
+
+ [util] Fix memory issue
+
+ util/options.cc | 6 ++----
+ util/options.hh | 9 +++++++++
+ 2 files changed, 11 insertions(+), 4 deletions(-)
+
+commit 14a4a9d649798d32c31f79b4045a885626dffc7f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jul 1 15:51:54 2014 -0400
+
+ Add Roozbeh to AUTHORS
+
+ He's been my shadow for all Indic-related changes in the last
+ few months.
+
+ AUTHORS | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 68f724484b1663255ee249481624e552d2e2313f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Jun 30 15:46:53 2014 -0400
+
+ [indic] Remove some more now-unused special-cases
+
+ src/hb-ot-shape-complex-indic.cc | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit e79c9489802f99dc7eb8b4c2765c4c71b5f80e60
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Jun 30 15:39:39 2014 -0400
+
+ [indic] Remove special-casing of U+1CF2,1CF3
+
+ These were introduced in a498565cedf0441ae723c5e5969f637d792a15e7,
+ but IndicSyllabicCategory has had the correct value already, so the
+ special code was never needed.
+
+ src/hb-ot-shape-complex-indic.cc | 6 ------
+ 1 file changed, 6 deletions(-)
+
+commit d743ce78e10758b7dbaf0cfd191309e5ef646881
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Jun 30 15:24:02 2014 -0400
+
+ [indic-table] Update to Unicode 7.0 data
+
+ Touch code just enough to preserve previous syllable structure
+ and functionality as closely as possible. Many further cleanups
+ coming later.
+
+ src/gen-indic-table.py | 4 +
+ src/hb-ot-shape-complex-indic-private.hh | 23 +-
+ src/hb-ot-shape-complex-indic-table.cc | 468
+ ++++++++++++++++++++++---------
+ src/hb-ot-shape-complex-indic.cc | 21 --
+ src/hb-ot-shape-complex-myanmar.cc | 2 -
+ 5 files changed, 355 insertions(+), 163 deletions(-)
+
+commit 5fa21b3ab7175f55f89cb194b544d5d4bd06a481
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Jun 30 14:30:54 2014 -0400
+
+ [indic-table] Fix category frequency counts in comments
+
+ src/gen-indic-table.py | 2 +-
+ src/hb-ot-shape-complex-indic-table.cc | 46
+ +++++++++++++++++-----------------
+ 2 files changed, 24 insertions(+), 24 deletions(-)
+
+commit 5c4e3e9a57b6b735e7d72cbd5f4070cf024d7015
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Jun 30 14:25:18 2014 -0400
+
+ Whitespace
+
+ src/hb-ot-shape-complex-indic-private.hh | 76
+ ++++++++++++++++----------------
+ 1 file changed, 38 insertions(+), 38 deletions(-)
+
+commit af528b6674bccac3efd13f8b33fcdc6aeb178f4c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 27 18:07:00 2014 -0400
+
+ Fix typo; ouch!
+
+ src/hb-ot-cmap-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 7d4ada66c96a748ce92f8e8edac149361c3dc829
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 27 17:30:59 2014 -0400
+
+ Mark unsed members with a "Z" suffix
+
+ There may be more. There are members that are by definition
+ redundant or reserved and not needed, NOT what we *currently*
+ don't use.
+
+ I'm sure there's more...
+
+ src/hb-open-file-private.hh | 6 +++---
+ src/hb-ot-cmap-table.hh | 24 ++++++++++++------------
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 3 files changed, 16 insertions(+), 16 deletions(-)
+
+commit 23afcff1d14e57f5ce30a4100698d4f2dc530958
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 27 17:22:36 2014 -0400
+
+ [ot-font] Implement Unicode variation selectors
+
+ src/hb-ot-font.cc | 20 +++++++++++++++++++-
+ 1 file changed, 19 insertions(+), 1 deletion(-)
+
+commit a5a4736916b6035e6413d4619f9e7287e683d51b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 27 17:03:22 2014 -0400
+
+ [cmap] Implement subtable format 14
+
+ src/hb-ot-cmap-table.hh | 147
+ +++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 133 insertions(+), 14 deletions(-)
+
+commit 586b60622c33878f9ca4826b4ef07369d32bf039
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 27 15:39:47 2014 -0400
+
+ Minor: final bits of cleanup
+
+ src/hb-open-type-private.hh | 1 +
+ src/hb-ot-layout-common-private.hh | 4 ++--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+commit 51d9ba09bc78188ec87218aef5232e80568c1712
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 27 15:27:15 2014 -0400
+
+ Minor
+
+ src/hb-open-type-private.hh | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+commit 3084767e92483c669f38319f153c498e9a6b92c7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 27 15:24:35 2014 -0400
+
+ Minor: Remove LongArrayOf
+
+ src/hb-open-file-private.hh | 2 +-
+ src/hb-open-type-private.hh | 4 ----
+ 2 files changed, 1 insertion(+), 5 deletions(-)
+
+commit 41ea59495032e712fa6f801350ee00d5f00b5724
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 27 15:23:18 2014 -0400
+
+ Minor: Remove LongSortedArrayOf
+
+ src/hb-open-type-private.hh | 4 ----
+ src/hb-ot-cmap-table.hh | 2 +-
+ 2 files changed, 1 insertion(+), 5 deletions(-)
+
+commit bb6ecf2ce5c2679c298741af17836a22e1d68121
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 27 15:13:44 2014 -0400
+
+ Minor: Remove LongOffsetArrayOf and LongOffsetLongArrayOf
+
+ src/hb-open-file-private.hh | 2 +-
+ src/hb-open-type-private.hh | 8 --------
+ src/hb-ot-layout-gdef-table.hh | 2 +-
+ 3 files changed, 2 insertions(+), 10 deletions(-)
+
+commit 99d281712390fd54e523b2f0580d10445457ec2f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 27 15:12:52 2014 -0400
+
+ Minor: Remove GenericOffset
+
+ src/hb-open-type-private.hh | 13 +++++--------
+ src/hb-ot-layout-common-private.hh | 8 ++++----
+ 2 files changed, 9 insertions(+), 12 deletions(-)
+
+commit 9da552dcc5b89b3bbbe5a55fb7c543222382e12a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 27 15:09:42 2014 -0400
+
+ Minor: Remove some GenericXXX templates
+
+ src/hb-open-type-private.hh | 32 +++++++++++---------------------
+ src/hb-ot-cmap-table.hh | 4 ++--
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 3 files changed, 14 insertions(+), 24 deletions(-)
+
+commit 36073ede5b52bd1231622cbacd1bee6b82696d81
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 27 14:48:54 2014 -0400
+
+ Minor: Reorder template parameter order
+
+ src/hb-open-type-private.hh | 14 +++++++-------
+ src/hb-ot-cmap-table.hh | 2 +-
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+commit 0394ec1bfbd7806cbe9fc809b34f96f8d12ffbf2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 27 14:40:35 2014 -0400
+
+ Minor: Introduce GenericOffset
+
+ src/hb-open-type-private.hh | 16 ++++++----------
+ 1 file changed, 6 insertions(+), 10 deletions(-)
+
+commit 0d1b3419a7bbfd18ab8fed1abd3a41dec11e8d97
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Jun 26 19:13:34 2014 -0400
+
+ Minor: Use template parameter default values for OffsetTo
+
+ src/hb-open-type-private.hh | 13 +++++--------
+ 1 file changed, 5 insertions(+), 8 deletions(-)
+
+commit 546b1adcdce2d3592843938b0b81ff32e67b0b83
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Jun 26 19:10:21 2014 -0400
+
+ Minor: Use template parameter default values for hb_prealloced_array_t
+
+ src/hb-private.hh | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+commit 911ca38645bd51764e7859bc482319e8f6d2f710
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jun 24 10:20:36 2014 -0600
+
+ Add back API removed recently
+
+ Add hb_ot_layout_language_get_required_feature_index() again, which
+ is used in Pango. This was removed in
+ da132937989acb4d8ca9bd41c79f98750e7dda30 in favor of
+ hb_ot_layout_language_get_required_feature().
+
+ API changes:
+
+ - Added hb_ot_layout_language_get_required_feature_index back.
+
+ src/hb-ot-layout.cc | 15 +++++++++++++++
+ src/hb-ot-layout.h | 7 +++++++
+ 2 files changed, 22 insertions(+)
+
+commit 89e4946929a8cd2359c7d76fa9272d5604243002
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Jun 22 11:32:13 2014 -0600
+
+ Add new IndicSyllabicCategory short forms for Unicode 7.0
+
+ src/gen-indic-table.py | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit dcee838e89c2863c2fda4e8f098e720637e02335
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Jun 22 11:29:59 2014 -0600
+
+ Minor
+
+ src/gen-arabic-table.py | 2 +-
+ src/gen-indic-table.py | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit f2ad86e6053fa87ab188c36edc3d98c92324c049
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Jun 21 15:31:10 2014 -0600
+
+ [indic-table-gen] Minor
+
+ src/gen-indic-table.py | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 2ec62279aab8c2263f17ffbc7c6f74304674f9a8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Jun 21 15:25:59 2014 -0600
+
+ [indic-table] Update to Unicode 6.3.0
+
+ Was from 6.2.0. It's a no-op. Committing for the record.
+
+ src/hb-ot-shape-complex-indic-table.cc | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit 5d4d7384efa97a30893ad28b9ad9a994722de12c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Jun 21 14:53:21 2014 -0600
+
+ Minor: format
+
+ src/hb-ot-shape-complex-arabic.cc | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+commit 44243ae5902cc420e6bf6ec2fca2584ba93ff2fb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Jun 21 14:19:34 2014 -0600
+
+ [arabic-table] Update to Unicode 7.0
+
+ Old table was from 6.2. Remove hard-coded Mongolian and Phags-pa
+ data.
+ This completes support for new scripts Manichian and Psaltar Pahlavi.
+
+ src/hb-ot-shape-complex-arabic-table.hh | 72
+ ++++++++++++++++++++++++++++-----
+ src/hb-ot-shape-complex-arabic.cc | 22 ----------
+ 2 files changed, 63 insertions(+), 31 deletions(-)
+
+commit cd86ab9b4f4d7bd4f563be64a83714fc8fb395d7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Jun 21 14:10:38 2014 -0600
+
+ [arabic-table] Add ZWJ/ZWNJ now that table is segmented
+
+ src/gen-arabic-table.py | 2 --
+ src/hb-ot-shape-complex-arabic-table.hh | 12 +++++++++++-
+ src/hb-ot-shape-complex-arabic.cc | 5 -----
+ 3 files changed, 11 insertions(+), 8 deletions(-)
+
+commit 2390d9b67e1dfeccd3f0850d1304c52b54817ca0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Jun 21 14:07:00 2014 -0600
+
+ [arabic-table] Further tune
+
+ In anticipation of Unicode 7.0 data coming in the next commit.
+
+ src/gen-arabic-table.py | 10 ++++++---
+ src/hb-ot-shape-complex-arabic-table.hh | 38
+ +++++++++++++++------------------
+ 2 files changed, 24 insertions(+), 24 deletions(-)
+
+commit a133e6067aaebc494c0156b5fac7f4a879e12dbe
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 20 18:01:34 2014 -0400
+
+ [indic-table] Minor
+
+ src/gen-indic-table.py | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+commit b900fa2c8cc088dbcbdbf90bfdf8764f9ee1c96a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 20 17:59:43 2014 -0400
+
+ [arabic-table] Use segmented table
+
+ No functional change.
+
+ src/gen-arabic-table.py | 82
+ +++++++++++++++++++++++----------
+ src/hb-ot-shape-complex-arabic-table.hh | 53 ++++++++++++++-------
+ src/hb-ot-shape-complex-arabic.cc | 8 ++--
+ 3 files changed, 97 insertions(+), 46 deletions(-)
+
+commit c2e113404640bf9b8bac469d0803ac946e77964f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 20 17:57:03 2014 -0400
+
+ [indic-table] Make output stable
+
+ src/gen-indic-table.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 55abfbd2ac1626af16151298a0837b837d0796df
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 20 16:47:43 2014 -0400
+
+ [indic-table] Minor
+
+ No output change.
+
+ src/gen-indic-table.py | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+commit f88670749006991282bcc4e8b6218487295ca670
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 20 16:30:10 2014 -0400
+
+ [arabic-table] Don't write comments
+
+ No functional change.
+
+ src/gen-arabic-table.py | 20 +-
+ src/hb-ot-shape-complex-arabic-table.hh | 710
+ ++------------------------------
+ 2 files changed, 38 insertions(+), 692 deletions(-)
+
+commit 200dfe3eb10feda2ad25940338b08011f4757ca4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 20 16:20:59 2014 -0400
+
+ [arabic-table] Use short names for values
+
+ No functional change.
+
+ src/gen-arabic-table.py | 16 +-
+ src/hb-ot-shape-complex-arabic-table.hh | 1386
+ ++++++++++++++++---------------
+ 2 files changed, 716 insertions(+), 686 deletions(-)
+
+commit 3f5327a41efcf50f64d9498ef3dfd6875ef6a5ab
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 20 16:17:42 2014 -0400
+
+ [arabic-table] Read Blocks.txt and shuffle code around
+
+ No functional change.
+
+ src/Makefile.am | 2 +-
+ src/gen-arabic-table.py | 80
+ +++++++++++++++++++--------------
+ src/hb-ot-shape-complex-arabic-table.hh | 30 ++++++++-----
+ 3 files changed, 67 insertions(+), 45 deletions(-)
+
+commit 171f970e4f72d9fe1af30eab32b96906ee4a14f5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 20 15:25:30 2014 -0400
+
+ [indic-table] Black-list Thai, Lao, and Tibetan
+
+ We don't need Indic table for those.
+
+ src/gen-indic-table.py | 3 ++
+ src/hb-ot-shape-complex-indic-table.cc | 94
+ +++++++---------------------------
+ 2 files changed, 21 insertions(+), 76 deletions(-)
+
+commit 65ac2dae4f284f563b2dc476a21e2b5a48124de8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 20 15:12:49 2014 -0400
+
+ [indic-table] Speed up lookup
+
+ src/gen-indic-table.py | 22 +++++++++---
+ src/hb-ot-shape-complex-indic-table.cc | 61
+ +++++++++++++++++++++++-----------
+ 2 files changed, 59 insertions(+), 24 deletions(-)
+
+commit 64442a3f4c5c7be08893454742cad6bfe73cb8d7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 20 14:58:53 2014 -0400
+
+ [indic-table] Fix compiler warning
+
+ src/gen-indic-table.py | 4 +---
+ src/hb-ot-shape-complex-indic-table.cc | 4 +---
+ 2 files changed, 2 insertions(+), 6 deletions(-)
+
+commit 0436e1d50527497ebe5053b51a34ce6590276249
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 20 14:56:22 2014 -0400
+
+ [indic-table] Make table more compact by not covering full blocks
+
+ -#define indic_offset_total 4416
+ +#define indic_offset_total 3816
+
+ -}; /* Table occupancy: 60% */
+ +}; /* Table occupancy: 69% */
+
+ src/gen-indic-table.py | 24 ++++--
+ src/hb-ot-shape-complex-indic-table.cc | 150
+ +++++++++------------------------
+ 2 files changed, 57 insertions(+), 117 deletions(-)
+
+commit 190a251479b3cfc68871ff1daf9a9d1abe3f86e6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 20 14:41:39 2014 -0400
+
+ [indic-table] Remove block range from data table
+
+ No functional change.
+
+ src/gen-indic-table.py | 4 +-
+ src/hb-ot-shape-complex-indic-table.cc | 102
+ ++++++++++++++++-----------------
+ 2 files changed, 54 insertions(+), 52 deletions(-)
+
+commit 2b051c6057920c564c13c5d6a3e6dca93446fa12
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 20 14:09:57 2014 -0400
+
+ Rename HB_VERSION_CHECK and hb_version_check to "atleast"
+
+ HB_VERSION_CHECK's comparison was originally written wrongly
+ by mistake. When API tests were written, they were also written
+ wrongly to pass given the wrong implementation... Sigh.
+
+ Given the purpose of this API, there's no point in fixing it
+ without renaming it. As such, rename.
+
+ API changes:
+
+ HB_VERSION_CHECK -> HB_VERSION_ATLEAST
+ hb_version_check -> hb_version_atleast
+
+ docs/reference/harfbuzz-sections.txt | 4 ++--
+ src/hb-common.cc | 10 +++++-----
+ src/hb-version.h.in | 10 +++++-----
+ test/api/test-version.c | 29 +++++++++++++++--------------
+ 4 files changed, 27 insertions(+), 26 deletions(-)
+
+commit cabfa538ed4b1355326fa8de05f7209dda1c1c7a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 20 13:51:21 2014 -0400
+
+ Adjust unused doc symbols
+
+ docs/reference/harfbuzz-sections.txt | 19 +++++++++++++++++--
+ src/hb-ot-shape.h | 21 ++++++++++-----------
+ 2 files changed, 27 insertions(+), 13 deletions(-)
+
+commit da132937989acb4d8ca9bd41c79f98750e7dda30
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date: Sun Apr 27 14:05:24 2014 +0100
+
+ Rework handling of requiredFeature to solve problem with rlig in
+ arial.ttf from winxp
+
+ https://bugzilla.mozilla.org/show_bug.cgi?id=986802
+ Fixes https://github.com/behdad/harfbuzz/pull/39
+
+ API Change:
+
+ -hb_ot_layout_language_get_required_feature_index
+ +hb_ot_layout_language_get_required_feature
+
+ New API takes an extra pointer argument. Pass NULL in to get
+ behavior of previous API.
+
+ Reworked by behdad
+
+ src/hb-ot-layout-gsubgpos-private.hh | 4 +--
+ src/hb-ot-layout.cc | 29 ++++++++++++---------
+ src/hb-ot-layout.h | 11 ++++----
+ src/hb-ot-map.cc | 50
+ ++++++++++++++++++++++++++----------
+ src/main.cc | 4 +--
+ 5 files changed, 64 insertions(+), 34 deletions(-)
+
+commit df554af99db390e42d378983bb3fcf583477a1d7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Jun 19 15:39:18 2014 -0400
+
+ Rename search() to bsearch() and lsearch()
+
+ Such that the complexity of the algorithm used is clear at
+ call site.
+
+ src/hb-open-type-private.hh | 4 ++--
+ src/hb-ot-cmap-table.hh | 14 +++++++-------
+ src/hb-ot-layout-common-private.hh | 9 +++++----
+ 3 files changed, 14 insertions(+), 13 deletions(-)
+
+commit fb8cc86ff99c08064ac58a559bb66cc340693b92
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Jun 19 15:30:18 2014 -0400
+
+ Rename sort() to qsort()
+
+ In an effort to make the algorithm used clear.
+
+ src/hb-coretext.cc | 4 ++--
+ src/hb-ot-map.cc | 4 ++--
+ src/hb-private.hh | 8 ++++----
+ src/hb-uniscribe.cc | 4 ++--
+ 4 files changed, 10 insertions(+), 10 deletions(-)
+
+commit 577ca4814314c374824cac736996b9cdd4f9d11f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jun 18 12:29:23 2014 -0400
+
+ [unicode7] Update list of Default_Ignorable codepoints
+
+ src/hb-unicode-private.hh | 66
+ +++++++++++++++++++++--------------------------
+ 1 file changed, 30 insertions(+), 36 deletions(-)
+
+commit 7cfee3827636f0dff7df5c8975a4fadd1b4bfbd5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Apr 28 15:09:30 2014 -0700
+
+ [unicode7] Route Manichaean and Psalter Pahlavi through Arabic shaper
+
+ Still needs update to joining table to fully work.
+
+ src/hb-ot-shape-complex-private.hh | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit a4a7899cd93fb9d1bc2163a4bbabfa733ee5bd52
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Apr 28 15:06:42 2014 -0700
+
+ [unicode7] Mark right-to-left scripts
+
+ src/hb-common.cc | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 62587bfc5178a447ef66d88eab7412a7efe84692
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Apr 28 15:07:21 2014 -0700
+
+ [unicode7] Declare Unicode 7 scripts
+
+ src/hb-common.h | 21 +++++++++------------
+ 1 file changed, 9 insertions(+), 12 deletions(-)
+
+commit dc61294aa93d36d0c5d187d4a692560a7cb46444
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Apr 28 14:58:28 2014 -0700
+
+ [unicode7] Add missing ISO 15924 tags
+
+ src/hb-common.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 7526373e70bc4c2e2072da36babf9399fcf483b8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jun 17 11:45:26 2014 -0400
+
+ [coretext] Remove unused var
+
+ src/hb-coretext.cc | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 798e4185bc71b1a63528e6b0af236d4c964ec607
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date: Tue Jun 10 13:10:30 2014 +0100
+
+ When zeroing mark widths for LTR, also adjust offset...
+
+ ...so that they overstrike preceding glyph.
+
+ https://github.com/behdad/harfbuzz/pull/43
+
+ src/hb-ot-shape.cc | 50
+ +++++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 39 insertions(+), 11 deletions(-)
+
+commit 80f7405a5208f88b8615aa4ce4c54ffeb16f04f8
+Author: Jonathan Kew <jfkthame@gmail.com>
+Date: Tue Jun 10 13:10:02 2014 +0100
+
+ [Thai] set the correct general category on Nikhahit when decomposing
+ Sara-Am.
+
+ src/hb-ot-shape-complex-thai.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 1d634cbb4b0338e1c2841127a72c5fac3a2a5ca1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 6 17:55:02 2014 -0400
+
+ Fix base-position when 'pref' is NOT formed
+
+ If pre-base reordering Ra is NOT formed (or formed and then
+ broken up), we should consider that Ra as base. This is
+ observable when there's a left matra or dotreph that positions
+ before base.
+
+ Now, it might be that we shouldn't do this if the Ra happend
+ to form a below form. We can't quite deduce that right now...
+
+ Micro test added. Also at:
+
+ https://code.google.com/a/google.com/p/noto-alpha/issues/detail?id=186#c29
+
+ src/hb-ot-shape-complex-indic.cc | 28
+ +++++++++++++++++++--
+ test/shaping/fonts/sha1sum/MANIFEST | 5 ++++
+ .../e207635780b42f898d58654b65098763e340f5c7.ttf | Bin 0 -> 3000 bytes
+ test/shaping/tests/indic-pref-blocking.tests | 3 ++-
+ 4 files changed, 33 insertions(+), 3 deletions(-)
+
+commit 04dc52fa15f5b7f9eb5f448ea43e7ef1b2269e88
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 6 17:28:38 2014 -0400
+
+ [indic] Recover OT_H undergone ligation and multiplication
+
+ Sometimes font designers form half/pref/etc consonant forms
+ unconditionally and then undo that conditionally. Try to
+ recover the OT_H classification in those cases.
+
+ No test number changes expected.
+
+ src/hb-ot-layout-private.hh | 8 ++++++++
+ src/hb-ot-shape-complex-indic.cc | 21 +++++++++++++++++++++
+ 2 files changed, 29 insertions(+)
+
+commit 39c8201f8e361e8c0f23f07bf20124ccadc6086c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 6 17:19:35 2014 -0400
+
+ [indic] Improve base re-finding
+
+ No test numbers change.
+
+ src/hb-ot-shape-complex-indic.cc | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit c04d5f0dd24d0ed9560fb9aebb5561ce946743c3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 6 17:02:39 2014 -0400
+
+ [indic] Minor
+
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 824d00dce483d0f4030c0cac253f994810e10f32
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Jun 9 14:17:33 2014 -0400
+
+ Fix commit 3f38c1137b6219a646da141b08463ffa922d4e35
+
+ Previous commit was not compiling with clang.
+
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 3f38c1137b6219a646da141b08463ffa922d4e35
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Jun 6 16:03:40 2014 -0400
+
+ Don't use -mstructure-size-boundary=8 on clang arm
+
+ As in building for Android / iPhone. Only set it if
+ struct{char} alignment is not 1.
+
+ NOT tested on an actual Arm architecture. Guess we'll know
+ when this makes it to people's build bots.
+
+ configure.ac | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+commit 0ff74b09d2ccf7a9ea0f0b463d8b6d819c86c837
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Jun 5 21:55:23 2014 -0400
+
+ Add missing test file. Oops
+
+ test/shaping/tests/indic-pref-blocking.tests | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 832a6f99b34f334b1e82b8e3a7ad137e823d203c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jun 4 16:57:42 2014 -0400
+
+ [indic] Don't reorder reph/pref if ligature was expanded
+
+ Normally if you want to, say, conditionally prevent a 'pref', you
+ would use blocking contextual matching. Some designers instead
+ form the 'pref' form, then undo it in context. To detect that
+ we now also remember glyphs that went through MultipleSubst.
+
+ In the only place that this is used, Uniscribe seems to only care
+ about the "last" transformation between Ligature and Multiple
+ substitions. Ie. if you ligate, expand, and ligate again, it
+ moves the pref, but if you ligate and expand it doesn't. That's
+ why we clear the MULTIPLIED bit when setting LIGATED.
+
+ Micro-test added. Test: U+0D2F,0D4D,0D30 with font from:
+
+ [1]
+ https://code.google.com/a/google.com/p/noto-alpha/issues/detail?id=186#c29
+
+ src/hb-ot-layout-gsub-table.hh | 2 +-
+ src/hb-ot-layout-gsubgpos-private.hh | 20
+ ++++++++++++++++----
+ src/hb-ot-layout-private.hh | 16
+ +++++++++++++++-
+ src/hb-ot-shape-complex-indic.cc | 4 ++--
+ test/shaping/Makefile.am | 5 ++++-
+ .../226bc2deab3846f1a682085f70c67d0421014144.ttf | Bin 0 -> 2828 bytes
+ test/shaping/tests/MANIFEST | 1 +
+ 7 files changed, 39 insertions(+), 9 deletions(-)
+
+commit b5be2317201774c84470167767ad83c8637cad5b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Jun 5 19:00:22 2014 -0400
+
+ [gsub] Adjust single-length ligature subst to act like single subst
+
+ src/hb-ot-layout-gsub-table.hh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit aae69451dfbf2e3671c555c234f788c194302818
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Jun 5 18:54:44 2014 -0400
+
+ [gsub] Minor shuffling
+
+ src/hb-ot-layout-gsub-table.hh | 29 ++++++++++++++++-------------
+ 1 file changed, 16 insertions(+), 13 deletions(-)
+
+commit b6b304f12be917b7449b3ac9409069fcd4a27d95
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Jun 5 17:12:54 2014 -0400
+
+ [ot] Add TODO re zero-len MultipleSubst sequences
+
+ src/hb-ot-layout-gsub-table.hh | 9 +++++++++
+ src/hb-ot-layout-gsubgpos-private.hh | 4 +++-
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+commit f1a72fe7bf863535ec09b559cc0bd878fd0799f2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jun 4 19:00:29 2014 -0400
+
+ [ot-font] Fix cmap EncodingRecord cmp order
+
+ src/hb-ot-cmap-table.hh | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
+
+commit ce34f0b07e5324ed52e6e2c43000c2b09ee010d4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jun 4 18:57:46 2014 -0400
+
+ [ot-font] Use binary search for format12 cmap subtable
+
+ src/hb-open-type-private.hh | 4 ++++
+ src/hb-ot-cmap-table.hh | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 257d1adfa1b3422c511c55e641840a6e31ec6008
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jun 4 18:47:55 2014 -0400
+
+ [ot-font] Work around broken cmap subtable format 4 length
+
+ Roboto was hitting this. FreeType also has pretty much the
+ same code for this, in ttcmap.c:tt_cmap4_validate():
+
+ /* in certain fonts, the `length' field is invalid and goes */
+ /* out of bound. We try to correct this here... */
+ if ( table + length > valid->limit )
+ {
+ if ( valid->level >= FT_VALIDATE_TIGHT )
+ FT_INVALID_TOO_SHORT;
+
+ length = (FT_UInt)( valid->limit - table );
+ }
+
+ src/hb-ot-cmap-table.hh | 22 ++++++++++++++++++----
+ 1 file changed, 18 insertions(+), 4 deletions(-)
+
+commit 51f563579b94e1ee23ced9bbcc7dd3341535ce72
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jun 4 18:42:32 2014 -0400
+
+ Move try_set to sanitize context
+
+ src/hb-open-type-private.hh | 22 ++++++++++------------
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 2 files changed, 11 insertions(+), 13 deletions(-)
+
+commit 500737e8e16dce5248aff394899bb3761a9c3bbf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Jun 4 18:17:29 2014 -0400
+
+ [ot-font] Don't select a Null cmap subtable
+
+ Can happen either in broken fonts, or as a result of sanitize().
+
+ src/hb-ot-cmap-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit dac86026a6bae5a8a03cfe885bf93f32e5f48614
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jun 3 17:57:00 2014 -0400
+
+ Fix some cppcheck warnings
+
+ Bug 77800 - cppcheck reports
+
+ src/hb-common.cc | 4 +++-
+ src/hb-ot-layout-common-private.hh | 2 +-
+ src/hb-private.hh | 2 +-
+ src/hb-shape-plan.cc | 4 ++--
+ 4 files changed, 7 insertions(+), 5 deletions(-)
+
+commit c306410cab368a27c1941a2625d3b475edeaac04
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jun 3 16:59:41 2014 -0400
+
+ Bug 77732 - Fix unused typedef warning for ASSERT_STATIC with GCC 4.8
+
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ae2b854eab7f1c48e56751c987a714c2c18d6eb6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Jun 3 16:59:09 2014 -0400
+
+ Move code around
+
+ src/hb-private.hh | 134
+ ++++++++++++++++++++++++++----------------------------
+ 1 file changed, 65 insertions(+), 69 deletions(-)
+
+commit 17c3b809f42aec34d83dba2e6229ad85804bebae
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Jun 2 15:08:18 2014 -0400
+
+ [indic] Treat U+A8E0..A8F1 as OT_A instead of OT_VD
+
+ Apparently they can intermix with other OT_A.
+
+ Test: U+0915,A8E2,1CD0
+
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6ae13f257c3986517c097fa666ab9f58bdc918b5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri May 30 17:38:14 2014 -0400
+
+ [graphite2] Fix cluster mapping
+
+ Patch from Martin Hosken. I expect this to fix the following bugs:
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=75076
+ https://bugzilla.gnome.org/show_bug.cgi?id=723582
+ https://bugzilla.redhat.com/show_bug.cgi?id=998812
+
+ src/hb-graphite2.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
commit 5875ad9c467b39d00ad4d98fd425179c701e6fd0
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu May 29 15:48:16 2014 -0400
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/Makefile.am b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/Makefile.am
index fa8711403d5..fa8711403d5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/Makefile.am
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/Makefile.am
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/NEWS b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/NEWS
index b7ac4151a02..bddf4578dbb 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/NEWS
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/NEWS
@@ -1,3 +1,19 @@
+Overview of changes leading to 0.9.30
+Wednesday, July 9, 2014
+=====================================
+- Update to Unicode 7.0.0:
+ * New scripts Manichaean and Psalter Pahlavi are shaped using
+ Arabic shaper.
+ * All the other new scripts to through the generic shaper for
+ now.
+- Minor Indic improvements.
+- Fix graphite2 backend cluster mapping [crasher!]
+- API changes:
+ * New HB_SCRIPT_* values for Unicode 7.0 scripts.
+ * New function hb_ot_layout_language_get_required_feature().
+- Build fixes.
+
+
Overview of changes leading to 0.9.29
Thursday, May 29, 2014
=====================================
@@ -10,6 +26,7 @@ Thursday, May 29, 2014
* Allow digits and a some punctuation as consonant placeholders.
- Build fixes.
+
Overview of changes leading to 0.9.28
Monday, April 28, 2014
=====================================
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/README b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/README
index 74e739da52a..74e739da52a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/README
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/README
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/THANKS b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/THANKS
index 940cfde5c39..940cfde5c39 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/THANKS
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/THANKS
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/TODO b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/TODO
index e1aa39c4c01..e1aa39c4c01 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/TODO
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/TODO
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/autogen.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/autogen.sh
index a267f297b06..a267f297b06 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/autogen.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/autogen.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/config.h.in b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/config.h.in
index 352a8d24882..491e7f428ef 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/config.h.in
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/config.h.in
@@ -1,5 +1,8 @@
/* config.h.in. Generated from configure.ac by autoheader. */
+/* The normal alignment of `struct{char;}', in bytes. */
+#undef ALIGNOF_STRUCT_CHAR__
+
/* Define to 1 if you have the `atexit' function. */
#undef HAVE_ATEXIT
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/configure.ac b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/configure.ac
index d2036ec9920..085d4b5fb69 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/configure.ac
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/configure.ac
@@ -1,6 +1,6 @@
AC_PREREQ([2.64])
AC_INIT([HarfBuzz],
- [0.9.29],
+ [0.9.30],
[http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz],
[harfbuzz],
[http://harfbuzz.org/])
@@ -72,6 +72,7 @@ AC_CHECK_HEADERS(unistd.h sys/mman.h)
# Compiler flags
AC_CANONICAL_HOST
+AC_CHECK_ALIGNOF([struct{char;}])
if test "x$GCC" = "xyes"; then
# Make symbols link locally
@@ -94,8 +95,10 @@ if test "x$GCC" = "xyes"; then
case "$host" in
arm-*-*)
- # Request byte alignment on arm
- CXXFLAGS="$CXXFLAGS -mstructure-size-boundary=8"
+ if test "x$ac_cv_alignof_struct_char__" != x1; then
+ # Request byte alignment
+ CXXFLAGS="$CXXFLAGS -mstructure-size-boundary=8"
+ fi
;;
esac
fi
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/gtk-doc.make b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/gtk-doc.make
index 104c3993f3e..104c3993f3e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/gtk-doc.make
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/gtk-doc.make
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/harfbuzz.doap b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/harfbuzz.doap
index d2896ebefa8..d2896ebefa8 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/harfbuzz.doap
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/harfbuzz.doap
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/Makefile.am b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/Makefile.am
index f670e2723d8..5832f7579a7 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/Makefile.am
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/Makefile.am
@@ -281,7 +281,7 @@ indic-table: gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt
mv hb-ot-shape-complex-indic-table.cc.tmp $(srcdir)/hb-ot-shape-complex-indic-table.cc || \
($(RM) hb-ot-shape-complex-indic-table.cc.tmp; false)
-arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt
+arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt
$(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-arabic-table.hh.tmp && \
mv hb-ot-shape-complex-arabic-table.hh.tmp $(srcdir)/hb-ot-shape-complex-arabic-table.hh || \
($(RM) hb-ot-shape-complex-arabic-table.hh.tmp; false)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-c-linkage-decls.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-c-linkage-decls.sh
index b10310f5384..b10310f5384 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-c-linkage-decls.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-c-linkage-decls.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-defs.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-defs.sh
index 357347f543a..357347f543a 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-defs.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-defs.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-header-guards.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-header-guards.sh
index 9a3302c7f87..9a3302c7f87 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-header-guards.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-header-guards.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-includes.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-includes.sh
index 5643c6973bc..5643c6973bc 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-includes.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-includes.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-libstdc++.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-libstdc++.sh
index e7e0e295e1a..e7e0e295e1a 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-libstdc++.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-libstdc++.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-static-inits.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-static-inits.sh
index 83d02c8a9bf..83d02c8a9bf 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-static-inits.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-static-inits.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-symbols.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-symbols.sh
index e000b01b863..e000b01b863 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/check-symbols.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/check-symbols.sh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/gen-arabic-table.py b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/gen-arabic-table.py
index da5a4fcbf5c..c4847081027 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/gen-arabic-table.py
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/gen-arabic-table.py
@@ -3,34 +3,48 @@
import sys
import os.path
-if len (sys.argv) != 3:
- print >>sys.stderr, "usage: ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt"
+if len (sys.argv) != 4:
+ print >>sys.stderr, "usage: ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt"
sys.exit (1)
files = [file (x) for x in sys.argv[1:]]
-headers = [[files[0].readline (), files[0].readline ()]]
+headers = [[files[0].readline (), files[0].readline ()], [files[2].readline (), files[2].readline ()]]
headers.append (["UnicodeData.txt does not have a header."])
while files[0].readline ().find ('##################') < 0:
pass
+blocks = {}
+def read_blocks(f):
+ global blocks
+ for line in f:
-def print_joining_table(f):
+ j = line.find ('#')
+ if j >= 0:
+ line = line[:j]
- print
- print "static const uint8_t joining_table[] ="
- print "{"
+ fields = [x.strip () for x in line.split (';')]
+ if len (fields) == 1:
+ continue
+
+ uu = fields[0].split ('..')
+ start = int (uu[0], 16)
+ if len (uu) == 1:
+ end = start
+ else:
+ end = int (uu[1], 16)
+
+ t = fields[1]
+
+ for u in range (start, end + 1):
+ blocks[u] = t
+
+def print_joining_table(f):
- min_u = 0x110000
- max_u = 0
- num = 0
- last = -1
- block = ''
+ values = {}
for line in f:
if line[0] == '#':
- if line.find (" characters"):
- block = line[2:].strip ()
continue
fields = [x.strip () for x in line.split (';')]
@@ -38,43 +52,100 @@ def print_joining_table(f):
continue
u = int (fields[0], 16)
- if u == 0x200C or u == 0x200D:
- continue
- if u < last:
- raise Exception ("Input data character not sorted", u)
- min_u = min (min_u, u)
- max_u = max (max_u, u)
- num += 1
-
- if block:
- print "\n /* %s */\n" % block
- block = ''
-
- if last != -1:
- last += 1
- while last < u:
- print " JOINING_TYPE_X, /* %04X */" % last
- last += 1
- else:
- last = u
if fields[3] in ["ALAPH", "DALATH RISH"]:
value = "JOINING_GROUP_" + fields[3].replace(' ', '_')
else:
value = "JOINING_TYPE_" + fields[2]
- print " %s, /* %s */" % (value, '; '.join(fields))
+ values[u] = value
+
+ short_value = {}
+ for value in set([v for v in values.values()] + ['JOINING_TYPE_X']):
+ short = ''.join(x[0] for x in value.split('_')[2:])
+ assert short not in short_value.values()
+ short_value[value] = short
print
- print "};"
+ for value,short in short_value.items():
+ print "#define %s %s" % (short, value)
+
+ uu = sorted(values.keys())
+ num = len(values)
+ all_blocks = set([blocks[u] for u in uu])
+
+ last = -100000
+ ranges = []
+ for u in uu:
+ if u - last <= 1+16*5:
+ ranges[-1][-1] = u
+ else:
+ ranges.append([u,u])
+ last = u
+
print
- print "#define JOINING_TABLE_FIRST 0x%04X" % min_u
- print "#define JOINING_TABLE_LAST 0x%04X" % max_u
+ print "static const uint8_t joining_table[] ="
+ print "{"
+ last_block = None
+ offset = 0
+ for start,end in ranges:
+
+ print
+ print "#define joining_offset_0x%04x %d" % (start, offset)
+
+ for u in range(start, end+1):
+
+ block = blocks.get(u, last_block)
+ value = values.get(u, "JOINING_TYPE_X")
+
+ if block != last_block or u == start:
+ if u != start:
+ print
+ if block in all_blocks:
+ print "\n /* %s */" % block
+ else:
+ print "\n /* FILLER */"
+ last_block = block
+ if u % 32 != 0:
+ print
+ print " /* %04X */" % (u//32*32), " " * (u % 32),
+
+ if u % 32 == 0:
+ print
+ print " /* %04X */ " % u,
+ sys.stdout.write("%s," % short_value[value])
+ print
+
+ offset += end - start + 1
+ print
+ occupancy = num * 100. / offset
+ print "}; /* Table items: %d; occupancy: %d%% */" % (offset, occupancy)
print
- occupancy = num * 100 / (max_u - min_u + 1)
- # Maintain at least 40% occupancy in the table */
- if occupancy < 40:
- raise Exception ("Table too sparse, please investigate: ", occupancy)
+ page_bits = 12;
+ print
+ print "static unsigned int"
+ print "joining_type (hb_codepoint_t u)"
+ print "{"
+ print " switch (u >> %d)" % page_bits
+ print " {"
+ pages = set([u>>page_bits for u in [s for s,e in ranges]+[e for s,e in ranges]])
+ for p in sorted(pages):
+ print " case 0x%0X:" % p
+ for (start,end) in ranges:
+ if p not in [start>>page_bits, end>>page_bits]: continue
+ offset = "joining_offset_0x%04x" % start
+ print " if (0x%04X <= u && u <= 0x%04X) return joining_table[u - 0x%04X + %s];" % (start, end, start, offset)
+ print " break;"
+ print ""
+ print " default:"
+ print " break;"
+ print " }"
+ print " return X;"
+ print "}"
+ print
+ for value,short in short_value.items():
+ print "#undef %s" % (short)
+ print
def print_shaping_table(f):
@@ -174,7 +245,7 @@ print "/* == Start of generated table == */"
print "/*"
print " * The following table is generated by running:"
print " *"
-print " * ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt"
+print " * ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt"
print " *"
print " * on files with these headers:"
print " *"
@@ -187,6 +258,7 @@ print "#ifndef HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH"
print "#define HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH"
print
+read_blocks (files[2])
print_joining_table (files[0])
print_shaping_table (files[1])
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/gen-indic-table.py b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/gen-indic-table.py
index 9ed3fd6d34d..c63fe23c36a 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/gen-indic-table.py
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/gen-indic-table.py
@@ -6,11 +6,12 @@ if len (sys.argv) != 4:
print >>sys.stderr, "usage: ./gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt"
sys.exit (1)
+BLACKLISTED_BLOCKS = ["Thai", "Lao", "Tibetan"]
+
files = [file (x) for x in sys.argv[1:]]
headers = [[f.readline () for i in range (2)] for f in files]
-blocks = {}
data = [{} for f in files]
values = [{} for f in files]
for i, f in enumerate (files):
@@ -35,10 +36,7 @@ for i, f in enumerate (files):
for u in range (start, end + 1):
data[i][u] = t
- values[i][t] = values[i].get (t, 0) + 1
-
- if i == 2:
- blocks[t] = (start, end)
+ values[i][t] = values[i].get (t, 0) + end - start + 1
# Merge data into one dict:
defaults = ('Other', 'Not_Applicable', 'No_Block')
@@ -52,10 +50,15 @@ for i,d in enumerate (data):
if not u in combined:
combined[u] = list (defaults)
combined[u][i] = v
+combined = {k:v for k,v in combined.items() if v[2] not in BLACKLISTED_BLOCKS}
data = combined
del combined
num = len (data)
+for u in [0x17CD, 0x17CE, 0x17CF, 0x17D0, 0x17D3]:
+ if data[u][0] == 'Other':
+ data[u][0] = "Vowel_Dependent"
+
# Move the outliers NO-BREAK SPACE and DOTTED CIRCLE out
singles = {}
for u in [0x00A0, 0x25CC]:
@@ -81,6 +84,10 @@ print
# Shorten values
short = [{
"Bindu": 'Bi',
+ "Cantillation_Mark": 'Ca',
+ "Joiner": 'ZWJ',
+ "Non_Joiner": 'ZWNJ',
+ "Number": 'Nd',
"Visarga": 'Vs',
"Vowel": 'Vo',
"Vowel_Dependent": 'M',
@@ -88,14 +95,14 @@ short = [{
},{
"Not_Applicable": 'x',
}]
-all_shorts = [[],[]]
+all_shorts = [{},{}]
# Add some of the values, to make them more readable, and to avoid duplicates
for i in range (2):
for v,s in short[i].items ():
- all_shorts[i].append (s)
+ all_shorts[i][s] = v
what = ["INDIC_SYLLABIC_CATEGORY", "INDIC_MATRA_CATEGORY"]
what_short = ["ISC", "IMC"]
@@ -110,8 +117,8 @@ for i in range (2):
else:
s = ''.join ([c for c in v_no_and if ord ('A') <= ord (c) <= ord ('Z')])
if s in all_shorts[i]:
- raise Exception ("Duplicate short value alias", v, s)
- all_shorts[i].append (s)
+ raise Exception ("Duplicate short value alias", v, all_shorts[i][s])
+ all_shorts[i][s] = v
short[i][v] = s
print "#define %s_%s %s_%s %s/* %3d chars; %s */" % \
(what_short[i], s, what[i], v.upper (), \
@@ -124,11 +131,16 @@ print
total = 0
used = 0
+last_block = None
def print_block (block, start, end, data):
- print
- print
- print " /* %s (%04X..%04X) */" % (block, start, end)
+ global total, used, last_block
+ if block and block != last_block:
+ print
+ print
+ print " /* %s */" % block
num = 0
+ assert start % 8 == 0
+ assert (end+1) % 8 == 0
for u in range (start, end+1):
if u % 8 == 0:
print
@@ -138,14 +150,15 @@ def print_block (block, start, end, data):
d = data.get (u, defaults)
sys.stdout.write ("%9s" % ("_(%s,%s)," % (short[0][d[0]], short[1][d[1]])))
- global total, used
total += end - start + 1
used += num
+ if block:
+ last_block = block
uu = data.keys ()
uu.sort ()
-last = -1
+last = -100000
num = 0
offset = 0
starts = []
@@ -155,11 +168,16 @@ for u in uu:
if u <= last:
continue
block = data[u][2]
- (start, end) = blocks[block]
+
+ start = u//8*8
+ end = start+1
+ while end in uu and block == data[end][2]:
+ end += 1
+ end = (end-1)//8*8 + 7
if start != last + 1:
- if start - last <= 33:
- print_block ("FILLER", last+1, start-1, data)
+ if start - last <= 1+16*3:
+ print_block (None, last+1, start-1, data)
last = start-1
else:
if last >= 0:
@@ -176,19 +194,30 @@ ends.append (last + 1)
offset += ends[-1] - starts[-1]
print
print
-print "#define indic_offset_total %d" % offset
-print
occupancy = used * 100. / total
-print "}; /* Table occupancy: %d%% */" % occupancy
+page_bits = 12
+print "}; /* Table items: %d; occupancy: %d%% */" % (offset, occupancy)
print
print "INDIC_TABLE_ELEMENT_TYPE"
print "hb_indic_get_categories (hb_codepoint_t u)"
print "{"
-for (start,end) in zip (starts, ends):
- offset = "indic_offset_0x%04x" % start
- print " if (0x%04X <= u && u <= 0x%04X) return indic_table[u - 0x%04X + %s];" % (start, end, start, offset)
-for u,d in singles.items ():
- print " if (unlikely (u == 0x%04X)) return _(%s,%s);" % (u, short[0][d[0]], short[1][d[1]])
+print " switch (u >> %d)" % page_bits
+print " {"
+pages = set([u>>page_bits for u in starts+ends+singles.keys()])
+for p in sorted(pages):
+ print " case 0x%0X:" % p
+ for (start,end) in zip (starts, ends):
+ if p not in [start>>page_bits, end>>page_bits]: continue
+ offset = "indic_offset_0x%04x" % start
+ print " if (0x%04X <= u && u <= 0x%04X) return indic_table[u - 0x%04X + %s];" % (start, end, start, offset)
+ for u,d in singles.items ():
+ if p != u>>page_bits: continue
+ print " if (unlikely (u == 0x%04X)) return _(%s,%s);" % (u, short[0][d[0]], short[1][d[1]])
+ print " break;"
+ print ""
+print " default:"
+print " break;"
+print " }"
print " return _(x,x);"
print "}"
print
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/harfbuzz-gobject.pc.in b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/harfbuzz-gobject.pc.in
index 70083601901..70083601901 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/harfbuzz-gobject.pc.in
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/harfbuzz-gobject.pc.in
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/harfbuzz-icu.pc.in b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/harfbuzz-icu.pc.in
index 949869a3563..949869a3563 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/harfbuzz-icu.pc.in
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/harfbuzz-icu.pc.in
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/harfbuzz.pc.in b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/harfbuzz.pc.in
index 7f27bbbdef0..7f27bbbdef0 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/harfbuzz.pc.in
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/harfbuzz.pc.in
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-atomic-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-atomic-private.hh
index 60cbcf91be1..60cbcf91be1 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-atomic-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-atomic-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-blob.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-blob.cc
index d6acca0fca5..b82b4b2a3a3 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-blob.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-blob.cc
@@ -25,7 +25,9 @@
*/
/* http://www.oracle.com/technetwork/articles/servers-storage-dev/standardheaderfiles-453865.html */
+#ifndef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 199309L
+#endif
#include "hb-private.hh"
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-blob.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-blob.h
index b2419abfd2a..b2419abfd2a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-blob.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-blob.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-deserialize-json.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-deserialize-json.hh
index dead700db82..dead700db82 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-deserialize-json.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-deserialize-json.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-deserialize-json.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-deserialize-json.rl
index 7351b2ab47c..7351b2ab47c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-deserialize-json.rl
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-deserialize-json.rl
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-deserialize-text.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-deserialize-text.hh
index a38efe3a415..a38efe3a415 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-deserialize-text.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-deserialize-text.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-deserialize-text.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-deserialize-text.rl
index 8856580fbe3..8856580fbe3 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-deserialize-text.rl
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-deserialize-text.rl
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-private.hh
index 3a2b9ab4816..3a2b9ab4816 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-serialize.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-serialize.cc
index 263bc81dc46..263bc81dc46 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer-serialize.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer-serialize.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer.cc
index 76bb10c0c85..76bb10c0c85 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer.h
index 3086851b012..3086851b012 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-buffer.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-buffer.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-cache-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-cache-private.hh
index 19b70b7e395..19b70b7e395 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-cache-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-cache-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-common.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-common.cc
index 96725c4e137..da5f4f70215 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-common.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-common.cc
@@ -299,9 +299,11 @@ hb_language_from_string (const char *str, int len)
if (len >= 0)
{
+ /* NUL-terminate it. */
len = MIN (len, (int) sizeof (strbuf) - 1);
- str = (char *) memcpy (strbuf, str, len);
+ memcpy (strbuf, str, len);
strbuf[len] = '\0';
+ str = strbuf;
}
hb_language_item_t *item = lang_find_or_insert (str);
@@ -482,6 +484,14 @@ hb_script_get_horizontal_direction (hb_script_t script)
case HB_SCRIPT_MEROITIC_CURSIVE:
case HB_SCRIPT_MEROITIC_HIEROGLYPHS:
+ /* Unicode-7.0 additions */
+ case HB_SCRIPT_MANICHAEAN:
+ case HB_SCRIPT_MENDE_KIKAKUI:
+ case HB_SCRIPT_NABATAEAN:
+ case HB_SCRIPT_OLD_NORTH_ARABIAN:
+ case HB_SCRIPT_PALMYRENE:
+ case HB_SCRIPT_PSALTER_PAHLAVI:
+
return HB_DIRECTION_RTL;
}
@@ -559,7 +569,7 @@ hb_version_string (void)
}
/**
- * hb_version_check:
+ * hb_version_atleast:
* @major:
* @minor:
* @micro:
@@ -571,9 +581,9 @@ hb_version_string (void)
* Since: 1.0
**/
hb_bool_t
-hb_version_check (unsigned int major,
- unsigned int minor,
- unsigned int micro)
+hb_version_atleast (unsigned int major,
+ unsigned int minor,
+ unsigned int micro)
{
- return HB_VERSION_CHECK (major, minor, micro);
+ return HB_VERSION_ATLEAST (major, minor, micro);
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-common.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-common.h
index c8bfd8825a2..b24cbb33ba7 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-common.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-common.h
@@ -270,17 +270,6 @@ typedef enum
/*6.1*/ HB_SCRIPT_SORA_SOMPENG = HB_TAG ('S','o','r','a'),
/*6.1*/ HB_SCRIPT_TAKRI = HB_TAG ('T','a','k','r'),
- /* No script set. */
- /*---*/ HB_SCRIPT_INVALID = HB_TAG_NONE,
-
- /* Dummy value to ensure any hb_tag_t value can be passed/stored as hb_script_t
- * without risking undefined behavior. */
- /*---*/ _HB_SCRIPT_MAX_VALUE = HB_TAG_MAX
-
-} hb_script_t;
-
-/* These are moved out of hb_script_t because glib-mkenums chokes otherwise. */
-#if 0
/*7.0*/ HB_SCRIPT_BASSA_VAH = HB_TAG ('B','a','s','s'),
/*7.0*/ HB_SCRIPT_CAUCASIAN_ALBANIAN = HB_TAG ('A','g','h','b'),
/*7.0*/ HB_SCRIPT_DUPLOYAN = HB_TAG ('D','u','p','l'),
@@ -292,19 +281,27 @@ typedef enum
/*7.0*/ HB_SCRIPT_MAHAJANI = HB_TAG ('M','a','h','j'),
/*7.0*/ HB_SCRIPT_MANICHAEAN = HB_TAG ('M','a','n','i'),
/*7.0*/ HB_SCRIPT_MENDE_KIKAKUI = HB_TAG ('M','e','n','d'),
- /*7.0*/ HB_SCRIPT_MODI = ???
+ /*7.0*/ HB_SCRIPT_MODI = HB_TAG ('M','o','d','i'),
/*7.0*/ HB_SCRIPT_MRO = HB_TAG ('M','r','o','o'),
/*7.0*/ HB_SCRIPT_NABATAEAN = HB_TAG ('N','b','a','t'),
/*7.0*/ HB_SCRIPT_OLD_NORTH_ARABIAN = HB_TAG ('N','a','r','b'),
/*7.0*/ HB_SCRIPT_OLD_PERMIC = HB_TAG ('P','e','r','m'),
/*7.0*/ HB_SCRIPT_PAHAWH_HMONG = HB_TAG ('H','m','n','g'),
/*7.0*/ HB_SCRIPT_PALMYRENE = HB_TAG ('P','a','l','m'),
- /*7.0*/ HB_SCRIPT_PAU_CIN_HAU = ???
+ /*7.0*/ HB_SCRIPT_PAU_CIN_HAU = HB_TAG ('P','a','u','c'),
/*7.0*/ HB_SCRIPT_PSALTER_PAHLAVI = HB_TAG ('P','h','l','p'),
- /*7.0*/ HB_SCRIPT_SIDDHAM = ???
+ /*7.0*/ HB_SCRIPT_SIDDHAM = HB_TAG ('S','i','d','d'),
/*7.0*/ HB_SCRIPT_TIRHUTA = HB_TAG ('T','i','r','h'),
/*7.0*/ HB_SCRIPT_WARANG_CITI = HB_TAG ('W','a','r','a'),
-#endif
+
+ /* No script set. */
+ /*---*/ HB_SCRIPT_INVALID = HB_TAG_NONE,
+
+ /* Dummy value to ensure any hb_tag_t value can be passed/stored as hb_script_t
+ * without risking undefined behavior. */
+ /*---*/ _HB_SCRIPT_MAX_VALUE = HB_TAG_MAX
+
+} hb_script_t;
/* Script functions */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-coretext.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-coretext.cc
index 570513667da..864e9e7c094 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-coretext.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-coretext.cc
@@ -477,7 +477,7 @@ _hb_coretext_shape (hb_shape_plan_t *shape_plan,
event->start = false;
event->feature = feature;
}
- feature_events.sort ();
+ feature_events.qsort ();
/* Add a strategic final event. */
{
active_feature_t feature;
@@ -507,14 +507,12 @@ _hb_coretext_shape (hb_shape_plan_t *shape_plan,
if (unlikely (!range))
goto fail_features;
- unsigned int offset = feature_records.len;
-
if (active_features.len)
{
CFMutableArrayRef features_array = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
/* TODO sort and resolve conflicting features? */
- /* active_features.sort (); */
+ /* active_features.qsort (); */
for (unsigned int j = 0; j < active_features.len; j++)
{
CFStringRef keys[2] = {
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-coretext.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-coretext.h
index 25267bc9784..25267bc9784 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-coretext.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-coretext.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-deprecated.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-deprecated.h
index 30ae4b1caf7..30ae4b1caf7 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-deprecated.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-deprecated.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-face-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-face-private.hh
index 6520d3dbdff..6520d3dbdff 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-face-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-face-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-face.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-face.cc
index 71cf49a5bc9..71cf49a5bc9 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-face.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-face.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-face.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-face.h
index f682c468de5..f682c468de5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-face.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-face.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-fallback-shape.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-fallback-shape.cc
index ea54bb8e0f0..ea54bb8e0f0 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-fallback-shape.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-fallback-shape.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-font-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-font-private.hh
index 33bbf7143a2..33bbf7143a2 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-font-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-font-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-font.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-font.cc
index fc4c8ebf077..fc4c8ebf077 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-font.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-font.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-font.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-font.h
index 7273db43eda..7273db43eda 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-font.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-font.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ft.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ft.cc
index 44e0b0bc2a5..44e0b0bc2a5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ft.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ft.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ft.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ft.h
index 696251e143f..696251e143f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ft.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ft.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-glib.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-glib.cc
index af43cab7113..af43cab7113 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-glib.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-glib.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-glib.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-glib.h
index 63a9d3366c5..63a9d3366c5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-glib.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-glib.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject-enums.cc.tmpl b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject-enums.cc.tmpl
index ca458a3846c..ca458a3846c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject-enums.cc.tmpl
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject-enums.cc.tmpl
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject-enums.h.tmpl b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject-enums.h.tmpl
index 6ecda06c2a6..6ecda06c2a6 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject-enums.h.tmpl
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject-enums.h.tmpl
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject-structs.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject-structs.cc
index 2451b66291b..2451b66291b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject-structs.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject-structs.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject-structs.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject-structs.h
index 4a88d569e8d..4a88d569e8d 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject-structs.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject-structs.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject.h
index ea1bd25df82..ea1bd25df82 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-gobject.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-gobject.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-graphite2.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-graphite2.cc
index a309ca853bc..709aa94419c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-graphite2.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-graphite2.cc
@@ -209,6 +209,7 @@ struct hb_graphite2_cluster_t {
unsigned int num_chars;
unsigned int base_glyph;
unsigned int num_glyphs;
+ unsigned int cluster;
};
hb_bool_t
@@ -299,6 +300,7 @@ _hb_graphite2_shape (hb_shape_plan_t *shape_plan,
memset (clusters, 0, sizeof (clusters[0]) * buffer->len);
hb_codepoint_t *pg = gids;
+ clusters[0].cluster = buffer->info[0].cluster;
for (is = gr_seg_first_slot (seg), ic = 0; is; is = gr_slot_next_in_segment (is), ic++)
{
unsigned int before = gr_slot_before (is);
@@ -316,6 +318,7 @@ _hb_graphite2_shape (hb_shape_plan_t *shape_plan,
{
hb_graphite2_cluster_t *c = clusters + ci + 1;
c->base_char = clusters[ci].base_char + clusters[ci].num_chars;
+ c->cluster = buffer->info[c->base_char].cluster;
c->num_chars = before - c->base_char;
c->base_glyph = ic;
c->num_glyphs = 0;
@@ -335,7 +338,7 @@ _hb_graphite2_shape (hb_shape_plan_t *shape_plan,
{
hb_glyph_info_t *info = &buffer->info[clusters[i].base_glyph + j];
info->codepoint = gids[clusters[i].base_glyph + j];
- info->cluster = gr_cinfo_base(gr_seg_cinfo(seg, clusters[i].base_char));
+ info->cluster = clusters[i].cluster;
}
}
buffer->len = glyph_count;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-graphite2.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-graphite2.h
index 3eae54acbd8..3eae54acbd8 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-graphite2.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-graphite2.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-icu.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-icu.cc
index 86c8b5cc5a2..86c8b5cc5a2 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-icu.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-icu.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-icu.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-icu.h
index f2f35f0f2ce..f2f35f0f2ce 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-icu.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-icu.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-mutex-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-mutex-private.hh
index 0fb21c2e86e..0fb21c2e86e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-mutex-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-mutex-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-object-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-object-private.hh
index 8a9ae34dbee..8a9ae34dbee 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-object-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-object-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-open-file-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-open-file-private.hh
index 250504ae20b..de76a967520 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-open-file-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-open-file-private.hh
@@ -110,9 +110,9 @@ typedef struct OffsetTable
protected:
Tag sfnt_version; /* '\0\001\0\00' if TrueType / 'OTTO' if CFF */
USHORT numTables; /* Number of tables. */
- USHORT searchRange; /* (Maximum power of 2 <= numTables) x 16 */
- USHORT entrySelector; /* Log2(maximum power of 2 <= numTables). */
- USHORT rangeShift; /* NumTables x 16-searchRange. */
+ USHORT searchRangeZ; /* (Maximum power of 2 <= numTables) x 16 */
+ USHORT entrySelectorZ; /* Log2(maximum power of 2 <= numTables). */
+ USHORT rangeShiftZ; /* NumTables x 16-searchRange. */
TableRecord tables[VAR]; /* TableRecord entries. numTables items */
public:
DEFINE_SIZE_ARRAY (12, tables);
@@ -139,7 +139,7 @@ struct TTCHeaderVersion1
Tag ttcTag; /* TrueType Collection ID string: 'ttcf' */
FixedVersion version; /* Version of the TTC Header (1.0),
* 0x00010000 */
- LongOffsetLongArrayOf<OffsetTable>
+ ArrayOf<OffsetTo<OffsetTable, ULONG>, ULONG>
table; /* Array of offsets to the OffsetTable for each font
* from the beginning of the file */
public:
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-open-type-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-open-type-private.hh
index 965d4d7adcb..5f4cd42cfd8 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-open-type-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-open-type-private.hh
@@ -266,6 +266,15 @@ struct hb_sanitize_context_t
return TRACE_RETURN (this->writable);
}
+ template <typename Type, typename ValueType>
+ inline bool try_set (Type *obj, const ValueType &v) {
+ if (this->may_edit (obj, obj->static_size)) {
+ obj->set (v);
+ return true;
+ }
+ return false;
+ }
+
mutable unsigned int debug_depth;
const char *start, *end;
bool writable;
@@ -621,20 +630,13 @@ struct Index : USHORT {
};
DEFINE_NULL_DATA (Index, "\xff\xff");
-/* Offset to a table, same as uint16 (length = 16 bits), Null offset = 0x0000 */
-struct Offset : USHORT
-{
- inline bool is_null (void) const { return 0 == *this; }
- public:
- DEFINE_SIZE_STATIC (2);
-};
-
-/* LongOffset to a table, same as uint32 (length = 32 bits), Null offset = 0x00000000 */
-struct LongOffset : ULONG
+/* Offset, Null offset = 0 */
+template <typename Type=USHORT>
+struct Offset : Type
{
inline bool is_null (void) const { return 0 == *this; }
public:
- DEFINE_SIZE_STATIC (4);
+ DEFINE_SIZE_STATIC (sizeof(Type));
};
@@ -683,12 +685,12 @@ struct FixedVersion
/*
- * Template subclasses of Offset and LongOffset that do the dereferencing.
+ * Template subclasses of Offset that do the dereferencing.
* Use: (base+offset)
*/
-template <typename OffsetType, typename Type>
-struct GenericOffsetTo : OffsetType
+template <typename Type, typename OffsetType=USHORT>
+struct OffsetTo : Offset<OffsetType>
{
inline const Type& operator () (const void *base) const
{
@@ -722,40 +724,25 @@ struct GenericOffsetTo : OffsetType
return TRACE_RETURN (likely (obj.sanitize (c, user_data)) || neuter (c));
}
- inline bool try_set (hb_sanitize_context_t *c, const OffsetType &v) {
- if (c->may_edit (this, this->static_size)) {
- this->set (v);
- return true;
- }
- return false;
- }
/* Set the offset to Null */
inline bool neuter (hb_sanitize_context_t *c) {
- if (c->may_edit (this, this->static_size)) {
- this->set (0); /* 0 is Null offset */
- return true;
- }
- return false;
+ return c->try_set (this, 0);
}
+ DEFINE_SIZE_STATIC (sizeof(OffsetType));
};
template <typename Base, typename OffsetType, typename Type>
-static inline const Type& operator + (const Base &base, const GenericOffsetTo<OffsetType, Type> &offset) { return offset (base); }
+static inline const Type& operator + (const Base &base, const OffsetTo<Type, OffsetType> &offset) { return offset (base); }
template <typename Base, typename OffsetType, typename Type>
-static inline Type& operator + (Base &base, GenericOffsetTo<OffsetType, Type> &offset) { return offset (base); }
-
-template <typename Type>
-struct OffsetTo : GenericOffsetTo<Offset, Type> {};
-
-template <typename Type>
-struct LongOffsetTo : GenericOffsetTo<LongOffset, Type> {};
+static inline Type& operator + (Base &base, OffsetTo<Type, OffsetType> &offset) { return offset (base); }
/*
* Array Types
*/
-template <typename LenType, typename Type>
-struct GenericArrayOf
+/* An array with a number of elements. */
+template <typename Type, typename LenType=USHORT>
+struct ArrayOf
{
const Type *sub_array (unsigned int start_offset, unsigned int *pcount /* IN/OUT */) const
{
@@ -839,7 +826,7 @@ struct GenericArrayOf
}
template <typename SearchType>
- inline int search (const SearchType &x) const
+ inline int lsearch (const SearchType &x) const
{
unsigned int count = len;
for (unsigned int i = 0; i < count; i++)
@@ -861,26 +848,10 @@ struct GenericArrayOf
DEFINE_SIZE_ARRAY (sizeof (LenType), array);
};
-/* An array with a USHORT number of elements. */
-template <typename Type>
-struct ArrayOf : GenericArrayOf<USHORT, Type> {};
-
-/* An array with a ULONG number of elements. */
-template <typename Type>
-struct LongArrayOf : GenericArrayOf<ULONG, Type> {};
-
/* Array of Offset's */
template <typename Type>
struct OffsetArrayOf : ArrayOf<OffsetTo<Type> > {};
-/* Array of LongOffset's */
-template <typename Type>
-struct LongOffsetArrayOf : ArrayOf<LongOffsetTo<Type> > {};
-
-/* LongArray of LongOffset's */
-template <typename Type>
-struct LongOffsetLongArrayOf : LongArrayOf<LongOffsetTo<Type> > {};
-
/* Array of offsets relative to the beginning of the array itself. */
template <typename Type>
struct OffsetListOf : OffsetArrayOf<Type>
@@ -903,9 +874,8 @@ struct OffsetListOf : OffsetArrayOf<Type>
};
-/* An array with a USHORT number of elements,
- * starting at second element. */
-template <typename Type>
+/* An array starting at second element. */
+template <typename Type, typename LenType=USHORT>
struct HeadlessArrayOf
{
inline const Type& operator [] (unsigned int i) const
@@ -952,19 +922,19 @@ struct HeadlessArrayOf
return TRACE_RETURN (true);
}
- USHORT len;
+ LenType len;
Type array[VAR];
public:
- DEFINE_SIZE_ARRAY (sizeof (USHORT), array);
+ DEFINE_SIZE_ARRAY (sizeof (LenType), array);
};
/* An array with sorted elements. Supports binary searching. */
-template <typename LenType, typename Type>
-struct GenericSortedArrayOf : GenericArrayOf<LenType, Type>
+template <typename Type, typename LenType=USHORT>
+struct SortedArrayOf : ArrayOf<Type, LenType>
{
template <typename SearchType>
- inline int search (const SearchType &x) const
+ inline int bsearch (const SearchType &x) const
{
/* Hand-coded bsearch here since this is in the hot inner loop. */
int min = 0, max = (int) this->len - 1;
@@ -983,10 +953,6 @@ struct GenericSortedArrayOf : GenericArrayOf<LenType, Type>
}
};
-/* A sorted array with a USHORT number of elements. */
-template <typename Type>
-struct SortedArrayOf : GenericSortedArrayOf<USHORT, Type> {};
-
} /* namespace OT */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-cmap-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-cmap-table.hh
index b0f01e120fc..e683b07eb1e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-cmap-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-cmap-table.hh
@@ -42,9 +42,6 @@ namespace OT {
struct CmapSubtableFormat0
{
- friend struct CmapSubtable;
-
- private:
inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
{
hb_codepoint_t gid = codepoint < 256 ? glyphIdArray[codepoint] : 0;
@@ -61,8 +58,8 @@ struct CmapSubtableFormat0
protected:
USHORT format; /* Format number is set to 0. */
- USHORT length; /* Byte length of this subtable. */
- USHORT language; /* Ignore. */
+ USHORT lengthZ; /* Byte length of this subtable. */
+ USHORT languageZ; /* Ignore. */
BYTE glyphIdArray[256];/* An array that maps character
* code to glyph index values. */
public:
@@ -71,9 +68,6 @@ struct CmapSubtableFormat0
struct CmapSubtableFormat4
{
- friend struct CmapSubtable;
-
- private:
inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
{
unsigned int segCount;
@@ -92,7 +86,7 @@ struct CmapSubtableFormat4
glyphIdArray = idRangeOffset + segCount;
glyphIdArrayLength = (this->length - 16 - 8 * segCount) / 2;
- /* Custom bsearch. */
+ /* Custom two-array bsearch. */
int min = 0, max = (int) segCount - 1;
unsigned int i;
while (min <= max)
@@ -131,22 +125,36 @@ struct CmapSubtableFormat4
return true;
}
- inline bool sanitize (hb_sanitize_context_t *c) {
+ inline bool sanitize (hb_sanitize_context_t *c)
+ {
TRACE_SANITIZE (this);
- return TRACE_RETURN (c->check_struct (this) &&
- c->check_range (this, length) &&
- 16 + 4 * (unsigned int) segCountX2 < length);
+ if (unlikely (!c->check_struct (this)))
+ return TRACE_RETURN (false);
+
+ if (unlikely (!c->check_range (this, length)))
+ {
+ /* Some broken fonts have too long of a "length" value.
+ * If that is the case, just change the value to truncate
+ * the subtable at the end of the blob. */
+ uint16_t new_length = (uint16_t) MIN ((uintptr_t) 65535,
+ (uintptr_t) (c->end -
+ (char *) this));
+ if (!c->try_set (&length, new_length))
+ return TRACE_RETURN (false);
+ }
+
+ return TRACE_RETURN (16 + 4 * (unsigned int) segCountX2 <= length);
}
protected:
USHORT format; /* Format number is set to 4. */
USHORT length; /* This is the length in bytes of the
* subtable. */
- USHORT language; /* Ignore. */
+ USHORT languageZ; /* Ignore. */
USHORT segCountX2; /* 2 x segCount. */
- USHORT searchRange; /* 2 * (2**floor(log2(segCount))) */
- USHORT entrySelector; /* log2(searchRange/2) */
- USHORT rangeShift; /* 2 x segCount - searchRange */
+ USHORT searchRangeZ; /* 2 * (2**floor(log2(segCount))) */
+ USHORT entrySelectorZ; /* log2(searchRange/2) */
+ USHORT rangeShiftZ; /* 2 x segCount - searchRange */
USHORT values[VAR];
#if 0
@@ -192,9 +200,6 @@ struct CmapSubtableLongGroup
template <typename UINT>
struct CmapSubtableTrimmed
{
- friend struct CmapSubtable;
-
- private:
inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
{
/* Rely on our implicit array bound-checking. */
@@ -212,10 +217,10 @@ struct CmapSubtableTrimmed
protected:
UINT formatReserved; /* Subtable format and (maybe) padding. */
- UINT length; /* Byte length of this subtable. */
- UINT language; /* Ignore. */
+ UINT lengthZ; /* Byte length of this subtable. */
+ UINT languageZ; /* Ignore. */
UINT startCharCode; /* First character code covered. */
- GenericArrayOf<UINT, GlyphID>
+ ArrayOf<GlyphID, UINT>
glyphIdArray; /* Array of glyph index values for character
* codes in the range. */
public:
@@ -228,12 +233,9 @@ struct CmapSubtableFormat10 : CmapSubtableTrimmed<ULONG > {};
template <typename T>
struct CmapSubtableLongSegmented
{
- friend struct CmapSubtable;
-
- private:
inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
{
- int i = groups.search (codepoint);
+ int i = groups.bsearch (codepoint);
if (i == -1)
return false;
*glyph = T::group_get_glyph (groups[i], codepoint);
@@ -247,10 +249,10 @@ struct CmapSubtableLongSegmented
protected:
USHORT format; /* Subtable format; set to 12. */
- USHORT reserved; /* Reserved; set to 0. */
- ULONG length; /* Byte length of this subtable. */
- ULONG language; /* Ignore. */
- LongArrayOf<CmapSubtableLongGroup>
+ USHORT reservedZ; /* Reserved; set to 0. */
+ ULONG lengthZ; /* Byte length of this subtable. */
+ ULONG languageZ; /* Ignore. */
+ SortedArrayOf<CmapSubtableLongGroup, ULONG>
groups; /* Groupings. */
public:
DEFINE_SIZE_ARRAY (16, groups);
@@ -270,11 +272,129 @@ struct CmapSubtableFormat13 : CmapSubtableLongSegmented<CmapSubtableFormat13>
{ return group.glyphID; }
};
+typedef enum
+{
+ GLYPH_VARIANT_NOT_FOUND = 0,
+ GLYPH_VARIANT_FOUND = 1,
+ GLYPH_VARIANT_USE_DEFAULT = 2
+} glyph_variant_t;
+
+struct UnicodeValueRange
+{
+ inline int cmp (const hb_codepoint_t &codepoint) const
+ {
+ if (codepoint < startUnicodeValue) return -1;
+ if (codepoint > startUnicodeValue + additionalCount) return +1;
+ return 0;
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) {
+ TRACE_SANITIZE (this);
+ return TRACE_RETURN (c->check_struct (this));
+ }
+
+ UINT24 startUnicodeValue; /* First value in this range. */
+ BYTE additionalCount; /* Number of additional values in this
+ * range. */
+ public:
+ DEFINE_SIZE_STATIC (4);
+};
+
+typedef SortedArrayOf<UnicodeValueRange, ULONG> DefaultUVS;
+
+struct UVSMapping
+{
+ inline int cmp (const hb_codepoint_t &codepoint) const
+ {
+ return unicodeValue.cmp (codepoint);
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) {
+ TRACE_SANITIZE (this);
+ return TRACE_RETURN (c->check_struct (this));
+ }
+
+ UINT24 unicodeValue; /* Base Unicode value of the UVS */
+ GlyphID glyphID; /* Glyph ID of the UVS */
+ public:
+ DEFINE_SIZE_STATIC (5);
+};
+
+typedef SortedArrayOf<UVSMapping, ULONG> NonDefaultUVS;
+
+struct VariationSelectorRecord
+{
+ inline glyph_variant_t get_glyph (hb_codepoint_t codepoint,
+ hb_codepoint_t *glyph,
+ const void *base) const
+ {
+ int i;
+ const DefaultUVS &defaults = base+defaultUVS;
+ i = defaults.bsearch (codepoint);
+ if (i != -1)
+ return GLYPH_VARIANT_USE_DEFAULT;
+ const NonDefaultUVS &nonDefaults = base+nonDefaultUVS;
+ i = nonDefaults.bsearch (codepoint);
+ if (i != -1)
+ {
+ *glyph = nonDefaults[i].glyphID;
+ return GLYPH_VARIANT_FOUND;
+ }
+ return GLYPH_VARIANT_NOT_FOUND;
+ }
+
+ inline int cmp (const hb_codepoint_t &variation_selector) const
+ {
+ return varSelector.cmp (variation_selector);
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c, void *base) {
+ TRACE_SANITIZE (this);
+ return TRACE_RETURN (c->check_struct (this) &&
+ defaultUVS.sanitize (c, base) &&
+ nonDefaultUVS.sanitize (c, base));
+ }
+
+ UINT24 varSelector; /* Variation selector. */
+ OffsetTo<DefaultUVS, ULONG>
+ defaultUVS; /* Offset to Default UVS Table. May be 0. */
+ OffsetTo<NonDefaultUVS, ULONG>
+ nonDefaultUVS; /* Offset to Non-Default UVS Table. May be 0. */
+ public:
+ DEFINE_SIZE_STATIC (11);
+};
+
+struct CmapSubtableFormat14
+{
+ inline glyph_variant_t get_glyph_variant (hb_codepoint_t codepoint,
+ hb_codepoint_t variation_selector,
+ hb_codepoint_t *glyph) const
+ {
+ return record[record.bsearch(variation_selector)].get_glyph (codepoint, glyph, this);
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) {
+ TRACE_SANITIZE (this);
+ return TRACE_RETURN (c->check_struct (this) &&
+ record.sanitize (c, this));
+ }
+
+ protected:
+ USHORT format; /* Format number is set to 0. */
+ ULONG lengthZ; /* Byte length of this subtable. */
+ SortedArrayOf<VariationSelectorRecord, ULONG>
+ record; /* Variation selector records; sorted
+ * in increasing order of `varSelector'. */
+ public:
+ DEFINE_SIZE_ARRAY (10, record);
+};
+
struct CmapSubtable
{
/* Note: We intentionally do NOT implement subtable formats 2 and 8. */
- inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+ inline bool get_glyph (hb_codepoint_t codepoint,
+ hb_codepoint_t *glyph) const
{
switch (u.format) {
case 0: return u.format0 .get_glyph(codepoint, glyph);
@@ -283,7 +403,18 @@ struct CmapSubtable
case 10: return u.format10.get_glyph(codepoint, glyph);
case 12: return u.format12.get_glyph(codepoint, glyph);
case 13: return u.format13.get_glyph(codepoint, glyph);
- default:return false;
+ case 14:
+ default: return false;
+ }
+ }
+
+ inline glyph_variant_t get_glyph_variant (hb_codepoint_t codepoint,
+ hb_codepoint_t variation_selector,
+ hb_codepoint_t *glyph) const
+ {
+ switch (u.format) {
+ case 14: return u.format14.get_glyph_variant(codepoint, variation_selector, glyph);
+ default: return GLYPH_VARIANT_NOT_FOUND;
}
}
@@ -297,6 +428,7 @@ struct CmapSubtable
case 10: return TRACE_RETURN (u.format10.sanitize (c));
case 12: return TRACE_RETURN (u.format12.sanitize (c));
case 13: return TRACE_RETURN (u.format13.sanitize (c));
+ case 14: return TRACE_RETURN (u.format14.sanitize (c));
default:return TRACE_RETURN (true);
}
}
@@ -310,6 +442,7 @@ struct CmapSubtable
CmapSubtableFormat10 format10;
CmapSubtableFormat12 format12;
CmapSubtableFormat13 format13;
+ CmapSubtableFormat14 format14;
} u;
public:
DEFINE_SIZE_UNION (2, format);
@@ -318,12 +451,12 @@ struct CmapSubtable
struct EncodingRecord
{
- int cmp (const EncodingRecord &other) const
+ inline int cmp (const EncodingRecord &other) const
{
int ret;
- ret = other.platformID.cmp (platformID);
+ ret = platformID.cmp (other.platformID);
if (ret) return ret;
- ret = other.encodingID.cmp (encodingID);
+ ret = encodingID.cmp (other.encodingID);
if (ret) return ret;
return 0;
}
@@ -336,7 +469,7 @@ struct EncodingRecord
USHORT platformID; /* Platform ID. */
USHORT encodingID; /* Platform-specific encoding ID. */
- LongOffsetTo<CmapSubtable>
+ OffsetTo<CmapSubtable, ULONG>
subtable; /* Byte offset from beginning of table to the subtable for this encoding. */
public:
DEFINE_SIZE_STATIC (8);
@@ -353,8 +486,11 @@ struct cmap
key.platformID.set (platform_id);
key.encodingID.set (encoding_id);
- int result = encodingRecord.search (key);
- if (result == -1)
+ /* Note: We can use bsearch, but since it has no performance
+ * implications, we use lsearch and as such accept fonts with
+ * unsorted subtable list. */
+ int result = encodingRecord./*bsearch*/lsearch (key);
+ if (result == -1 || !encodingRecord[result].subtable)
return NULL;
return &(this+encodingRecord[result].subtable);
@@ -367,8 +503,9 @@ struct cmap
encodingRecord.sanitize (c, this));
}
- USHORT version; /* Table version number (0). */
- ArrayOf<EncodingRecord> encodingRecord; /* Encoding tables. */
+ USHORT version; /* Table version number (0). */
+ SortedArrayOf<EncodingRecord>
+ encodingRecord; /* Encoding tables. */
public:
DEFINE_SIZE_ARRAY (4, encodingRecord);
};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-font.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-font.cc
index c1fc49e147f..c9890c59228 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-font.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-font.cc
@@ -44,6 +44,7 @@ struct hb_ot_font_t
hb_blob_t *hmtx_blob;
const OT::CmapSubtable *cmap;
+ const OT::CmapSubtable *cmap_uvs;
hb_blob_t *cmap_blob;
};
@@ -77,8 +78,10 @@ _hb_ot_font_create (hb_font_t *font)
ot_font->cmap_blob = OT::Sanitizer<OT::cmap>::sanitize (font->face->reference_table (HB_OT_TAG_cmap));
const OT::cmap *cmap = OT::Sanitizer<OT::cmap>::lock_instance (ot_font->cmap_blob);
const OT::CmapSubtable *subtable = NULL;
+ const OT::CmapSubtable *subtable_uvs = NULL;
/* 32-bit subtables. */
+ if (!subtable) subtable = cmap->find_subtable (0, 6);
if (!subtable) subtable = cmap->find_subtable (0, 4);
if (!subtable) subtable = cmap->find_subtable (3, 10);
/* 16-bit subtables. */
@@ -87,7 +90,13 @@ _hb_ot_font_create (hb_font_t *font)
/* Meh. */
if (!subtable) subtable = &OT::Null(OT::CmapSubtable);
+ /* UVS subtable. */
+ if (!subtable_uvs) subtable_uvs = cmap->find_subtable (0, 5);
+ /* Meh. */
+ if (!subtable_uvs) subtable_uvs = &OT::Null(OT::CmapSubtable);
+
ot_font->cmap = subtable;
+ ot_font->cmap_uvs = subtable_uvs;
return ot_font;
}
@@ -114,7 +123,16 @@ hb_ot_get_glyph (hb_font_t *font HB_UNUSED,
const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
if (unlikely (variation_selector))
- return false;
+ {
+ switch (ot_font->cmap_uvs->get_glyph_variant (unicode,
+ variation_selector,
+ glyph))
+ {
+ case OT::GLYPH_VARIANT_NOT_FOUND: return false;
+ case OT::GLYPH_VARIANT_FOUND: return true;
+ case OT::GLYPH_VARIANT_USE_DEFAULT: break;
+ }
+ }
return ot_font->cmap->get_glyph (unicode, glyph);
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-font.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-font.h
index 7a8c04ac33d..7a8c04ac33d 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-font.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-font.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-head-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-head-table.hh
index 0285f0cf310..0285f0cf310 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-head-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-head-table.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-hhea-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-hhea-table.hh
index f34bd26053a..f34bd26053a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-hhea-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-hhea-table.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-hmtx-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-hmtx-table.hh
index e918e3b3f40..e918e3b3f40 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-hmtx-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-hmtx-table.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-common-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-common-private.hh
index 02d0d0f87c7..c9b4b2f9388 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-common-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-common-private.hh
@@ -103,7 +103,8 @@ struct RecordArrayOf : SortedArrayOf<Record<Type> > {
}
inline bool find_index (hb_tag_t tag, unsigned int *index) const
{
- int i = this->search (tag);
+ /* If we want to allow non-sorted data, we can lsearch(). */
+ int i = this->/*lsearch*/bsearch (tag);
if (i != -1) {
if (index) *index = i;
return true;
@@ -203,7 +204,7 @@ struct LangSys
return TRACE_RETURN (c->check_struct (this) && featureIndex.sanitize (c));
}
- Offset lookupOrder; /* = Null (reserved for an offset to a
+ Offset<> lookupOrderZ; /* = Null (reserved for an offset to a
* reordering table) */
USHORT reqFeatureIndex;/* Index of a feature required for this
* language system--if no required features
@@ -501,11 +502,11 @@ struct Feature
* Adobe tools, only the 'size' feature had FeatureParams defined.
*/
- Offset orig_offset = featureParams;
+ OffsetTo<FeatureParams> orig_offset = featureParams;
if (unlikely (!featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE)))
return TRACE_RETURN (false);
- if (likely (!orig_offset))
+ if (likely (orig_offset.is_null ()))
return TRACE_RETURN (true);
if (featureParams == 0 && closure &&
@@ -513,13 +514,13 @@ struct Feature
closure->list_base && closure->list_base < this)
{
unsigned int new_offset_int = (unsigned int) orig_offset -
- ((char *) this - (char *) closure->list_base);
+ (((char *) this) - ((char *) closure->list_base));
- Offset new_offset;
+ OffsetTo<FeatureParams> new_offset;
/* Check that it did not overflow. */
new_offset.set (new_offset_int);
if (new_offset == new_offset_int &&
- featureParams.try_set (c, new_offset) &&
+ c->try_set (&featureParams, new_offset) &&
!featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE))
return TRACE_RETURN (false);
}
@@ -608,7 +609,7 @@ struct Lookup
USHORT lookupType; /* Different enumerations for GSUB and GPOS */
USHORT lookupFlag; /* Lookup qualifiers */
- ArrayOf<Offset>
+ ArrayOf<Offset<> >
subTable; /* Array of SubTables */
USHORT markFilteringSetX[VAR]; /* Index (base 0) into GDEF mark glyph sets
* structure. This field is only present if bit
@@ -631,7 +632,7 @@ struct CoverageFormat1
private:
inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
{
- int i = glyphArray.search (glyph_id);
+ int i = glyphArray.bsearch (glyph_id);
ASSERT_STATIC (((unsigned int) -1) == NOT_COVERED);
return i;
}
@@ -696,7 +697,7 @@ struct CoverageFormat2
private:
inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
{
- int i = rangeRecord.search (glyph_id);
+ int i = rangeRecord.bsearch (glyph_id);
if (i != -1) {
const RangeRecord &range = rangeRecord[i];
return (unsigned int) range.value + (glyph_id - range.start);
@@ -992,7 +993,7 @@ struct ClassDefFormat2
private:
inline unsigned int get_class (hb_codepoint_t glyph_id) const
{
- int i = rangeRecord.search (glyph_id);
+ int i = rangeRecord.bsearch (glyph_id);
if (i != -1)
return rangeRecord[i].value;
return 0;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-gdef-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-gdef-table.hh
index 389cbb9e398..bb8a4b944fa 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-gdef-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-gdef-table.hh
@@ -282,7 +282,7 @@ struct MarkGlyphSetsFormat1
protected:
USHORT format; /* Format identifier--format = 1 */
- LongOffsetArrayOf<Coverage>
+ ArrayOf<OffsetTo<Coverage, ULONG> >
coverage; /* Array of long offsets to mark set
* coverage tables */
public:
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-gpos-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-gpos-table.hh
index 91e1f8b0019..91e1f8b0019 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-gpos-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-gpos-table.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-gsub-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-gsub-table.hh
index 3a1a0ef3dd7..2e867e3de68 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-gsub-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-gsub-table.hh
@@ -270,23 +270,34 @@ struct Sequence
inline bool apply (hb_apply_context_t *c) const
{
TRACE_APPLY (this);
- if (unlikely (!substitute.len)) return TRACE_RETURN (false);
-
- unsigned int klass = _hb_glyph_info_is_ligature (&c->buffer->cur()) ?
- HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0;
unsigned int count = substitute.len;
- if (count == 1) /* Special-case to make it in-place. */
+
+ /* TODO:
+ * Testing shows that Uniscribe actually allows zero-len susbstitute,
+ * which essentially deletes a glyph. We don't allow for now. It
+ * can be confusing to the client since the cluster from the deleted
+ * glyph won't be merged with any output cluster... Also, currently
+ * buffer->move_to() makes assumptions about this too. Perhaps fix
+ * in the future after figuring out what to do with the clusters.
+ */
+ if (unlikely (!count)) return TRACE_RETURN (false);
+
+ /* Special-case to make it in-place and not consider this
+ * as a "multiplied" substitution. */
+ if (unlikely (count == 1))
{
c->replace_glyph (substitute.array[0]);
+ return TRACE_RETURN (true);
}
- else
- {
- for (unsigned int i = 0; i < count; i++) {
- _hb_glyph_info_set_lig_props_for_component (&c->buffer->cur(), i);
- c->output_glyph (substitute.array[i], klass);
- }
- c->buffer->skip_glyph ();
+
+ unsigned int klass = _hb_glyph_info_is_ligature (&c->buffer->cur()) ?
+ HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0;
+
+ for (unsigned int i = 0; i < count; i++) {
+ _hb_glyph_info_set_lig_props_for_component (&c->buffer->cur(), i);
+ c->output_glyph_for_component (substitute.array[i], klass);
}
+ c->buffer->skip_glyph ();
return TRACE_RETURN (true);
}
@@ -624,7 +635,16 @@ struct Ligature
{
TRACE_APPLY (this);
unsigned int count = component.len;
- if (unlikely (count < 1)) return TRACE_RETURN (false);
+
+ if (unlikely (!count)) return TRACE_RETURN (false);
+
+ /* Special-case to make it in-place and not consider this
+ * as a "ligated" substitution. */
+ if (unlikely (count == 1))
+ {
+ c->replace_glyph (ligGlyph);
+ return TRACE_RETURN (true);
+ }
bool is_mark_ligature = false;
unsigned int total_component_count = 0;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-gsubgpos-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-gsubgpos-private.hh
index cd27c05b007..8f8d7b828f8 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-gsubgpos-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-gsubgpos-private.hh
@@ -567,13 +567,25 @@ struct hb_apply_context_t
inline void _set_glyph_props (hb_codepoint_t glyph_index,
unsigned int class_guess = 0,
- bool ligature = false) const
+ bool ligature = false,
+ bool component = false) const
{
unsigned int add_in = _hb_glyph_info_get_glyph_props (&buffer->cur()) &
HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE;
add_in |= HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED;
if (ligature)
+ {
add_in |= HB_OT_LAYOUT_GLYPH_PROPS_LIGATED;
+ /* In the only place that the MULTIPLIED bit is used, Uniscribe
+ * seems to only care about the "last" transformation between
+ * Ligature and Multiple substitions. Ie. if you ligate, expand,
+ * and ligate again, it forgives the multiplication and acts as
+ * if only ligation happened. As such, clear MULTIPLIED bit.
+ */
+ add_in &= ~HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
+ }
+ if (component)
+ add_in |= HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
if (likely (has_glyph_classes))
_hb_glyph_info_set_glyph_props (&buffer->cur(), add_in | gdef.get_glyph_props (glyph_index));
else if (class_guess)
@@ -596,10 +608,10 @@ struct hb_apply_context_t
_set_glyph_props (glyph_index, class_guess, true);
buffer->replace_glyph (glyph_index);
}
- inline void output_glyph (hb_codepoint_t glyph_index,
- unsigned int class_guess) const
+ inline void output_glyph_for_component (hb_codepoint_t glyph_index,
+ unsigned int class_guess) const
{
- _set_glyph_props (glyph_index, class_guess);
+ _set_glyph_props (glyph_index, class_guess, false, true);
buffer->output_glyph (glyph_index);
}
};
@@ -995,7 +1007,9 @@ static inline bool apply_lookup (hb_apply_context_t *c,
/* Recursed lookup changed buffer len. Adjust. */
- /* end can't go back past the current match position. */
+ /* end can't go back past the current match position.
+ * Note: this is only true because we do NOT allow MultipleSubst
+ * with zero sequence len. */
end = MAX ((int) match_positions[idx] + 1, int (end) + delta);
unsigned int next = idx + 1; /* next now is the position after the recursed lookup. */
@@ -2254,8 +2268,8 @@ struct GSUBGPOS
inline unsigned int get_feature_count (void) const
{ return (this+featureList).len; }
- inline const Tag& get_feature_tag (unsigned int i) const
- { return (this+featureList).get_tag (i); }
+ inline hb_tag_t get_feature_tag (unsigned int i) const
+ { return i == Index::NOT_FOUND_INDEX ? HB_TAG_NONE : (this+featureList).get_tag (i); }
inline unsigned int get_feature_tags (unsigned int start_offset,
unsigned int *feature_count /* IN/OUT */,
hb_tag_t *feature_tags /* OUT */) const
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-jstf-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-jstf-table.hh
index 79eb859566a..79eb859566a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-jstf-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-jstf-table.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-private.hh
index 4f03e1b0e00..e66e19c443e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout-private.hh
@@ -50,9 +50,11 @@ typedef enum
/* The following are used internally; not derived from GDEF. */
HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED = 0x10u,
HB_OT_LAYOUT_GLYPH_PROPS_LIGATED = 0x20u,
+ HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED = 0x40u,
HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE = HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED |
- HB_OT_LAYOUT_GLYPH_PROPS_LIGATED
+ HB_OT_LAYOUT_GLYPH_PROPS_LIGATED |
+ HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED
} hb_ot_layout_glyph_class_mask_t;
@@ -381,6 +383,26 @@ _hb_glyph_info_ligated (const hb_glyph_info_t *info)
return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATED);
}
+static inline bool
+_hb_glyph_info_multiplied (const hb_glyph_info_t *info)
+{
+ return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED);
+}
+
+static inline bool
+_hb_glyph_info_ligated_and_didnt_multiply (const hb_glyph_info_t *info)
+{
+ return _hb_glyph_info_ligated (info) && !_hb_glyph_info_multiplied (info);
+}
+
+static inline void
+_hb_glyph_info_clear_ligated_and_multiplied (hb_glyph_info_t *info)
+{
+ info->glyph_props() &= ~(HB_OT_LAYOUT_GLYPH_PROPS_LIGATED |
+ HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED);
+}
+
+
/* Allocation / deallocation. */
static inline void
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout.cc
index 183726e63cf..661d90ea0d6 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout.cc
@@ -327,9 +327,28 @@ hb_ot_layout_language_get_required_feature_index (hb_face_t *face,
unsigned int language_index,
unsigned int *feature_index)
{
- const OT::LangSys &l = get_gsubgpos_table (face, table_tag).get_script (script_index).get_lang_sys (language_index);
+ return hb_ot_layout_language_get_required_feature (face,
+ table_tag,
+ script_index,
+ language_index,
+ feature_index,
+ NULL);
+}
+
+hb_bool_t
+hb_ot_layout_language_get_required_feature (hb_face_t *face,
+ hb_tag_t table_tag,
+ unsigned int script_index,
+ unsigned int language_index,
+ unsigned int *feature_index,
+ hb_tag_t *feature_tag)
+{
+ const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+ const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
- if (feature_index) *feature_index = l.get_required_feature_index ();
+ unsigned int index = l.get_required_feature_index ();
+ if (feature_index) *feature_index = index;
+ if (feature_tag) *feature_tag = g.get_feature_tag (index);
return l.has_required_feature ();
}
@@ -468,11 +487,12 @@ _hb_ot_layout_collect_lookups_features (hb_face_t *face,
if (!features)
{
unsigned int required_feature_index;
- if (hb_ot_layout_language_get_required_feature_index (face,
- table_tag,
- script_index,
- language_index,
- &required_feature_index))
+ if (hb_ot_layout_language_get_required_feature (face,
+ table_tag,
+ script_index,
+ language_index,
+ &required_feature_index,
+ NULL))
_hb_ot_layout_collect_lookups_lookups (face,
table_tag,
required_feature_index,
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout.h
index d90eff374d7..87171d75311 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-layout.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-layout.h
@@ -146,6 +146,14 @@ hb_ot_layout_language_get_required_feature_index (hb_face_t *face,
unsigned int language_index,
unsigned int *feature_index);
+hb_bool_t
+hb_ot_layout_language_get_required_feature (hb_face_t *face,
+ hb_tag_t table_tag,
+ unsigned int script_index,
+ unsigned int language_index,
+ unsigned int *feature_index,
+ hb_tag_t *feature_tag);
+
unsigned int
hb_ot_layout_language_get_feature_indexes (hb_face_t *face,
hb_tag_t table_tag,
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-map-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-map-private.hh
index 74e2d9aca4c..74e2d9aca4c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-map-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-map-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-map.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-map.cc
index 559193c1bae..4985eb22b20 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-map.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-map.cc
@@ -99,6 +99,7 @@ void hb_ot_map_builder_t::add_feature (hb_tag_t tag, unsigned int value,
{
feature_info_t *info = feature_infos.push();
if (unlikely (!info)) return;
+ if (unlikely (!tag)) return;
info->tag = tag;
info->seq = feature_infos.len;
info->max_value = value;
@@ -131,9 +132,25 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
{
m.global_mask = 1;
- for (unsigned int table_index = 0; table_index < 2; table_index++) {
+ unsigned int required_feature_index[2];
+ hb_tag_t required_feature_tag[2];
+ /* We default to applying required feature in stage 0. If the required
+ * feature has a tag that is known to the shaper, we apply required feature
+ * in the stage for that tag.
+ */
+ unsigned int required_feature_stage[2] = {0, 0};
+
+ for (unsigned int table_index = 0; table_index < 2; table_index++)
+ {
m.chosen_script[table_index] = chosen_script[table_index];
m.found_script[table_index] = found_script[table_index];
+
+ hb_ot_layout_language_get_required_feature (face,
+ table_tags[table_index],
+ script_index[table_index],
+ language_index[table_index],
+ &required_feature_index[table_index],
+ &required_feature_tag[table_index]);
}
if (!feature_infos.len)
@@ -141,7 +158,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
/* Sort features and merge duplicates */
{
- feature_infos.sort ();
+ feature_infos.qsort ();
unsigned int j = 0;
for (unsigned int i = 1; i < feature_infos.len; i++)
if (feature_infos[i].tag != feature_infos[j].tag)
@@ -166,7 +183,8 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
/* Allocate bits now */
unsigned int next_bit = 1;
- for (unsigned int i = 0; i < feature_infos.len; i++) {
+ for (unsigned int i = 0; i < feature_infos.len; i++)
+ {
const feature_info_t *info = &feature_infos[i];
unsigned int bits_needed;
@@ -184,12 +202,20 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
hb_bool_t found = false;
unsigned int feature_index[2];
for (unsigned int table_index = 0; table_index < 2; table_index++)
+ {
+ if (required_feature_tag[table_index] == info->tag)
+ {
+ required_feature_stage[table_index] = info->stage[table_index];
+ found = true;
+ continue;
+ }
found |= hb_ot_layout_language_find_feature (face,
table_tags[table_index],
script_index[table_index],
language_index[table_index],
info->tag,
&feature_index[table_index]);
+ }
if (!found && !(info->flags & F_HAS_FALLBACK))
continue;
@@ -224,23 +250,21 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
add_gsub_pause (NULL);
add_gpos_pause (NULL);
- for (unsigned int table_index = 0; table_index < 2; table_index++) {
- hb_tag_t table_tag = table_tags[table_index];
-
+ for (unsigned int table_index = 0; table_index < 2; table_index++)
+ {
/* Collect lookup indices for features */
- unsigned int required_feature_index;
- if (hb_ot_layout_language_get_required_feature_index (face,
- table_tag,
- script_index[table_index],
- language_index[table_index],
- &required_feature_index))
- m.add_lookups (face, table_index, required_feature_index, 1, true);
-
unsigned int stage_index = 0;
unsigned int last_num_lookups = 0;
for (unsigned stage = 0; stage < current_stage[table_index]; stage++)
{
+ if (required_feature_index[table_index] != HB_OT_LAYOUT_NO_FEATURE_INDEX &&
+ required_feature_stage[table_index] == stage)
+ m.add_lookups (face, table_index,
+ required_feature_index[table_index],
+ 1 /* mask */,
+ true /* auto_zwj */);
+
for (unsigned i = 0; i < m.features.len; i++)
if (m.features[i].stage[table_index] == stage)
m.add_lookups (face, table_index,
@@ -251,7 +275,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m)
/* Sort lookups and merge duplicates */
if (last_num_lookups < m.lookups[table_index].len)
{
- m.lookups[table_index].sort (last_num_lookups, m.lookups[table_index].len);
+ m.lookups[table_index].qsort (last_num_lookups, m.lookups[table_index].len);
unsigned int j = last_num_lookups;
for (unsigned int i = j + 1; i < m.lookups[table_index].len; i++)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-maxp-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-maxp-table.hh
index e6d255579c6..e6d255579c6 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-maxp-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-maxp-table.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-name-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-name-table.hh
index 07dc0565ca6..31d9fac7e29 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-name-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-name-table.hh
@@ -121,7 +121,7 @@ struct name
/* We only implement format 0 for now. */
USHORT format; /* Format selector (=0/1). */
USHORT count; /* Number of name records. */
- Offset stringOffset; /* Offset to start of string storage (from start of table). */
+ Offset<> stringOffset; /* Offset to start of string storage (from start of table). */
NameRecord nameRecord[VAR]; /* The name records where count is the number of records. */
public:
DEFINE_SIZE_ARRAY (6, nameRecord);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-arabic-fallback.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-arabic-fallback.hh
index 6b2b87e3f28..6b2b87e3f28 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-arabic-fallback.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-arabic-fallback.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-arabic-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-arabic-table.hh
new file mode 100644
index 00000000000..ae7011ad3fd
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-arabic-table.hh
@@ -0,0 +1,383 @@
+/* == Start of generated table == */
+/*
+ * The following table is generated by running:
+ *
+ * ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt
+ *
+ * on files with these headers:
+ *
+ * # ArabicShaping-7.0.0.txt
+ * # Date: 2014-02-14, 21:00:00 GMT [RP, KW, LI]
+ * # Blocks-7.0.0.txt
+ * # Date: 2014-04-03, 23:23:00 GMT [RP, KW]
+ * UnicodeData.txt does not have a header.
+ */
+
+#ifndef HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH
+#define HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH
+
+
+#define X JOINING_TYPE_X
+#define R JOINING_TYPE_R
+#define U JOINING_TYPE_U
+#define A JOINING_GROUP_ALAPH
+#define DR JOINING_GROUP_DALATH_RISH
+#define L JOINING_TYPE_L
+#define C JOINING_TYPE_C
+#define D JOINING_TYPE_D
+
+static const uint8_t joining_table[] =
+{
+
+#define joining_offset_0x0600 0
+
+ /* Arabic */
+
+ /* 0600 */ U,U,U,U,U,U,X,X,U,X,X,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 0620 */ D,U,R,R,R,R,D,R,D,R,D,D,D,D,D,R,R,R,R,D,D,D,D,D,D,D,D,D,D,D,D,D,
+ /* 0640 */ C,D,D,D,D,D,D,D,R,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 0660 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,D,D,X,R,R,R,U,R,R,R,D,D,D,D,D,D,D,D,
+ /* 0680 */ D,D,D,D,D,D,D,D,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,D,D,D,D,D,D,
+ /* 06A0 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+ /* 06C0 */ R,D,D,R,R,R,R,R,R,R,R,R,D,R,D,R,D,D,R,R,X,R,X,X,X,X,X,X,X,U,X,X,
+ /* 06E0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,R,R,X,X,X,X,X,X,X,X,X,X,D,D,D,X,X,D,
+
+ /* Syriac */
+
+ /* 0700 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,A,X,D,D,D,DR,DR,R,R,R,D,D,D,D,R,D,
+ /* 0720 */ D,D,D,D,D,D,D,D,R,D,DR,D,R,D,D,DR,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 0740 */ X,X,X,X,X,X,X,X,X,X,X,X,X,R,D,D,
+
+ /* Arabic Supplement */
+
+ /* 0740 */ D,D,D,D,D,D,D,D,D,R,R,R,D,D,D,D,
+ /* 0760 */ D,D,D,D,D,D,D,D,D,D,D,R,R,D,D,D,D,R,D,R,R,D,D,D,R,R,D,D,D,D,D,D,
+
+ /* FILLER */
+
+ /* 0780 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 07A0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+
+ /* NKo */
+
+ /* 07C0 */ X,X,X,X,X,X,X,X,X,X,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+ /* 07E0 */ D,D,D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,C,X,X,X,X,X,
+
+ /* FILLER */
+
+ /* 0800 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 0820 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+
+ /* Mandaic */
+
+ /* 0840 */ R,D,D,D,D,D,R,D,D,R,D,D,D,D,D,R,D,D,D,D,R,D,U,U,U,X,X,X,X,X,X,X,
+ /* 0860 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 0880 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+
+ /* Arabic Extended-A */
+
+ /* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,
+
+#define joining_offset_0x1806 691
+
+ /* Mongolian */
+
+ /* 1800 */ U,D,X,X,C,X,X,X,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 1820 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+ /* 1840 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+ /* 1860 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,
+ /* 1880 */ U,U,U,U,U,U,U,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+ /* 18A0 */ D,D,D,D,D,D,D,D,D,X,D,
+
+#define joining_offset_0x200c 856
+
+ /* General Punctuation */
+
+ /* 2000 */ U,C,
+
+#define joining_offset_0x2066 858
+
+ /* General Punctuation */
+
+ /* 2060 */ U,U,U,U,
+
+#define joining_offset_0xa840 862
+
+ /* Phags-pa */
+
+ /* A840 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+ /* A860 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,L,U,
+
+#define joining_offset_0x10ac0 914
+
+ /* Manichaean */
+
+ /* 10AC0 */ D,D,D,D,D,R,U,R,U,R,R,U,U,L,R,R,R,R,R,D,D,D,D,L,D,D,D,D,D,R,D,D,
+ /* 10AE0 */ D,R,U,U,R,X,X,X,X,X,X,D,D,D,D,R,
+
+#define joining_offset_0x10b80 962
+
+ /* Psalter Pahlavi */
+
+ /* 10B80 */ D,R,D,R,R,R,D,D,D,R,D,D,R,D,R,R,D,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 10BA0 */ X,X,X,X,X,X,X,X,X,R,R,R,R,D,D,U,
+
+}; /* Table items: 1010; occupancy: 57% */
+
+
+static unsigned int
+joining_type (hb_codepoint_t u)
+{
+ switch (u >> 12)
+ {
+ case 0x0:
+ if (0x0600 <= u && u <= 0x08B2) return joining_table[u - 0x0600 + joining_offset_0x0600];
+ break;
+
+ case 0x1:
+ if (0x1806 <= u && u <= 0x18AA) return joining_table[u - 0x1806 + joining_offset_0x1806];
+ break;
+
+ case 0x2:
+ if (0x200C <= u && u <= 0x200D) return joining_table[u - 0x200C + joining_offset_0x200c];
+ if (0x2066 <= u && u <= 0x2069) return joining_table[u - 0x2066 + joining_offset_0x2066];
+ break;
+
+ case 0xA:
+ if (0xA840 <= u && u <= 0xA873) return joining_table[u - 0xA840 + joining_offset_0xa840];
+ break;
+
+ case 0x10:
+ if (0x10AC0 <= u && u <= 0x10AEF) return joining_table[u - 0x10AC0 + joining_offset_0x10ac0];
+ if (0x10B80 <= u && u <= 0x10BAF) return joining_table[u - 0x10B80 + joining_offset_0x10b80];
+ break;
+
+ default:
+ break;
+ }
+ return X;
+}
+
+#undef X
+#undef R
+#undef U
+#undef A
+#undef DR
+#undef L
+#undef C
+#undef D
+
+
+static const uint16_t shaping_table[][4] =
+{
+ {0x0000, 0x0000, 0x0000, 0xFE80}, /* U+0621 ARABIC LETTER HAMZA ISOLATED FORM */
+ {0x0000, 0x0000, 0xFE82, 0xFE81}, /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */
+ {0x0000, 0x0000, 0xFE84, 0xFE83}, /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */
+ {0x0000, 0x0000, 0xFE86, 0xFE85}, /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */
+ {0x0000, 0x0000, 0xFE88, 0xFE87}, /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */
+ {0xFE8B, 0xFE8C, 0xFE8A, 0xFE89}, /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */
+ {0x0000, 0x0000, 0xFE8E, 0xFE8D}, /* U+0627 ARABIC LETTER ALEF */
+ {0xFE91, 0xFE92, 0xFE90, 0xFE8F}, /* U+0628 ARABIC LETTER BEH */
+ {0x0000, 0x0000, 0xFE94, 0xFE93}, /* U+0629 ARABIC LETTER TEH MARBUTA */
+ {0xFE97, 0xFE98, 0xFE96, 0xFE95}, /* U+062A ARABIC LETTER TEH */
+ {0xFE9B, 0xFE9C, 0xFE9A, 0xFE99}, /* U+062B ARABIC LETTER THEH */
+ {0xFE9F, 0xFEA0, 0xFE9E, 0xFE9D}, /* U+062C ARABIC LETTER JEEM */
+ {0xFEA3, 0xFEA4, 0xFEA2, 0xFEA1}, /* U+062D ARABIC LETTER HAH */
+ {0xFEA7, 0xFEA8, 0xFEA6, 0xFEA5}, /* U+062E ARABIC LETTER KHAH */
+ {0x0000, 0x0000, 0xFEAA, 0xFEA9}, /* U+062F ARABIC LETTER DAL */
+ {0x0000, 0x0000, 0xFEAC, 0xFEAB}, /* U+0630 ARABIC LETTER THAL */
+ {0x0000, 0x0000, 0xFEAE, 0xFEAD}, /* U+0631 ARABIC LETTER REH */
+ {0x0000, 0x0000, 0xFEB0, 0xFEAF}, /* U+0632 ARABIC LETTER ZAIN */
+ {0xFEB3, 0xFEB4, 0xFEB2, 0xFEB1}, /* U+0633 ARABIC LETTER SEEN */
+ {0xFEB7, 0xFEB8, 0xFEB6, 0xFEB5}, /* U+0634 ARABIC LETTER SHEEN */
+ {0xFEBB, 0xFEBC, 0xFEBA, 0xFEB9}, /* U+0635 ARABIC LETTER SAD */
+ {0xFEBF, 0xFEC0, 0xFEBE, 0xFEBD}, /* U+0636 ARABIC LETTER DAD */
+ {0xFEC3, 0xFEC4, 0xFEC2, 0xFEC1}, /* U+0637 ARABIC LETTER TAH */
+ {0xFEC7, 0xFEC8, 0xFEC6, 0xFEC5}, /* U+0638 ARABIC LETTER ZAH */
+ {0xFECB, 0xFECC, 0xFECA, 0xFEC9}, /* U+0639 ARABIC LETTER AIN */
+ {0xFECF, 0xFED0, 0xFECE, 0xFECD}, /* U+063A ARABIC LETTER GHAIN */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063B */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063C */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063D */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063E */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+063F */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0640 */
+ {0xFED3, 0xFED4, 0xFED2, 0xFED1}, /* U+0641 ARABIC LETTER FEH */
+ {0xFED7, 0xFED8, 0xFED6, 0xFED5}, /* U+0642 ARABIC LETTER QAF */
+ {0xFEDB, 0xFEDC, 0xFEDA, 0xFED9}, /* U+0643 ARABIC LETTER KAF */
+ {0xFEDF, 0xFEE0, 0xFEDE, 0xFEDD}, /* U+0644 ARABIC LETTER LAM */
+ {0xFEE3, 0xFEE4, 0xFEE2, 0xFEE1}, /* U+0645 ARABIC LETTER MEEM */
+ {0xFEE7, 0xFEE8, 0xFEE6, 0xFEE5}, /* U+0646 ARABIC LETTER NOON */
+ {0xFEEB, 0xFEEC, 0xFEEA, 0xFEE9}, /* U+0647 ARABIC LETTER HEH */
+ {0x0000, 0x0000, 0xFEEE, 0xFEED}, /* U+0648 ARABIC LETTER WAW */
+ {0xFBE8, 0xFBE9, 0xFEF0, 0xFEEF}, /* U+0649 ARABIC LETTER */
+ {0xFEF3, 0xFEF4, 0xFEF2, 0xFEF1}, /* U+064A ARABIC LETTER YEH */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064B */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064C */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064D */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064E */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+064F */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0650 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0651 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0652 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0653 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0654 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0655 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0656 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0657 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0658 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0659 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065A */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065B */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065C */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065D */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065E */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+065F */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0660 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0661 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0662 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0663 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0664 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0665 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0666 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0667 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0668 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0669 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066A */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066B */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066C */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066D */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066E */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+066F */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0670 */
+ {0x0000, 0x0000, 0xFB51, 0xFB50}, /* U+0671 ARABIC LETTER ALEF WASLA */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0672 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0673 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0674 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0675 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0676 */
+ {0x0000, 0x0000, 0x0000, 0xFBDD}, /* U+0677 ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0678 */
+ {0xFB68, 0xFB69, 0xFB67, 0xFB66}, /* U+0679 ARABIC LETTER TTEH */
+ {0xFB60, 0xFB61, 0xFB5F, 0xFB5E}, /* U+067A ARABIC LETTER TTEHEH */
+ {0xFB54, 0xFB55, 0xFB53, 0xFB52}, /* U+067B ARABIC LETTER BEEH */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+067C */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+067D */
+ {0xFB58, 0xFB59, 0xFB57, 0xFB56}, /* U+067E ARABIC LETTER PEH */
+ {0xFB64, 0xFB65, 0xFB63, 0xFB62}, /* U+067F ARABIC LETTER TEHEH */
+ {0xFB5C, 0xFB5D, 0xFB5B, 0xFB5A}, /* U+0680 ARABIC LETTER BEHEH */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0681 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0682 */
+ {0xFB78, 0xFB79, 0xFB77, 0xFB76}, /* U+0683 ARABIC LETTER NYEH */
+ {0xFB74, 0xFB75, 0xFB73, 0xFB72}, /* U+0684 ARABIC LETTER DYEH */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0685 */
+ {0xFB7C, 0xFB7D, 0xFB7B, 0xFB7A}, /* U+0686 ARABIC LETTER TCHEH */
+ {0xFB80, 0xFB81, 0xFB7F, 0xFB7E}, /* U+0687 ARABIC LETTER TCHEHEH */
+ {0x0000, 0x0000, 0xFB89, 0xFB88}, /* U+0688 ARABIC LETTER DDAL */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0689 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+068A */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+068B */
+ {0x0000, 0x0000, 0xFB85, 0xFB84}, /* U+068C ARABIC LETTER DAHAL */
+ {0x0000, 0x0000, 0xFB83, 0xFB82}, /* U+068D ARABIC LETTER DDAHAL */
+ {0x0000, 0x0000, 0xFB87, 0xFB86}, /* U+068E ARABIC LETTER DUL */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+068F */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0690 */
+ {0x0000, 0x0000, 0xFB8D, 0xFB8C}, /* U+0691 ARABIC LETTER RREH */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0692 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0693 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0694 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0695 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0696 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0697 */
+ {0x0000, 0x0000, 0xFB8B, 0xFB8A}, /* U+0698 ARABIC LETTER JEH */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+0699 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069A */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069B */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069C */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069D */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069E */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+069F */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A0 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A1 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A2 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A3 */
+ {0xFB6C, 0xFB6D, 0xFB6B, 0xFB6A}, /* U+06A4 ARABIC LETTER VEH */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A5 */
+ {0xFB70, 0xFB71, 0xFB6F, 0xFB6E}, /* U+06A6 ARABIC LETTER PEHEH */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A7 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A8 */
+ {0xFB90, 0xFB91, 0xFB8F, 0xFB8E}, /* U+06A9 ARABIC LETTER KEHEH */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AA */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AB */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AC */
+ {0xFBD5, 0xFBD6, 0xFBD4, 0xFBD3}, /* U+06AD ARABIC LETTER NG */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AE */
+ {0xFB94, 0xFB95, 0xFB93, 0xFB92}, /* U+06AF ARABIC LETTER GAF */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B0 */
+ {0xFB9C, 0xFB9D, 0xFB9B, 0xFB9A}, /* U+06B1 ARABIC LETTER NGOEH */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B2 */
+ {0xFB98, 0xFB99, 0xFB97, 0xFB96}, /* U+06B3 ARABIC LETTER GUEH */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B4 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B5 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B6 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B7 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B8 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B9 */
+ {0x0000, 0x0000, 0xFB9F, 0xFB9E}, /* U+06BA ARABIC LETTER NOON GHUNNA */
+ {0xFBA2, 0xFBA3, 0xFBA1, 0xFBA0}, /* U+06BB ARABIC LETTER RNOON */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BC */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BD */
+ {0xFBAC, 0xFBAD, 0xFBAB, 0xFBAA}, /* U+06BE ARABIC LETTER HEH DOACHASHMEE */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BF */
+ {0x0000, 0x0000, 0xFBA5, 0xFBA4}, /* U+06C0 ARABIC LETTER HEH WITH YEH ABOVE */
+ {0xFBA8, 0xFBA9, 0xFBA7, 0xFBA6}, /* U+06C1 ARABIC LETTER HEH GOAL */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C2 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C3 */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C4 */
+ {0x0000, 0x0000, 0xFBE1, 0xFBE0}, /* U+06C5 ARABIC LETTER KIRGHIZ OE */
+ {0x0000, 0x0000, 0xFBDA, 0xFBD9}, /* U+06C6 ARABIC LETTER OE */
+ {0x0000, 0x0000, 0xFBD8, 0xFBD7}, /* U+06C7 ARABIC LETTER U */
+ {0x0000, 0x0000, 0xFBDC, 0xFBDB}, /* U+06C8 ARABIC LETTER YU */
+ {0x0000, 0x0000, 0xFBE3, 0xFBE2}, /* U+06C9 ARABIC LETTER KIRGHIZ YU */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CA */
+ {0x0000, 0x0000, 0xFBDF, 0xFBDE}, /* U+06CB ARABIC LETTER VE */
+ {0xFBFE, 0xFBFF, 0xFBFD, 0xFBFC}, /* U+06CC ARABIC LETTER FARSI YEH */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CD */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CE */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CF */
+ {0xFBE6, 0xFBE7, 0xFBE5, 0xFBE4}, /* U+06D0 ARABIC LETTER E */
+ {0x0000, 0x0000, 0x0000, 0x0000}, /* U+06D1 */
+ {0x0000, 0x0000, 0xFBAF, 0xFBAE}, /* U+06D2 ARABIC LETTER YEH BARREE */
+ {0x0000, 0x0000, 0xFBB1, 0xFBB0}, /* U+06D3 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE */
+};
+
+#define SHAPING_TABLE_FIRST 0x0621
+#define SHAPING_TABLE_LAST 0x06D3
+
+
+static const struct ligature_set_t {
+ uint16_t first;
+ struct ligature_pairs_t {
+ uint16_t second;
+ uint16_t ligature;
+ } ligatures[4];
+} ligature_table[] =
+{
+ { 0xFEDF, {
+ { 0xFE88, 0xFEF9 }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM */
+ { 0xFE82, 0xFEF5 }, /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM */
+ { 0xFE8E, 0xFEFB }, /* ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM */
+ { 0xFE84, 0xFEF7 }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM */
+ }},
+ { 0xFEE0, {
+ { 0xFE88, 0xFEFA }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM */
+ { 0xFE82, 0xFEF6 }, /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM */
+ { 0xFE8E, 0xFEFC }, /* ARABIC LIGATURE LAM WITH ALEF FINAL FORM */
+ { 0xFE84, 0xFEF8 }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM */
+ }},
+};
+
+
+#endif /* HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH */
+
+/* == End of generated table == */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-arabic.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-arabic.cc
index ea6d85c1e6c..b7aa694cb6b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-arabic.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-arabic.cc
@@ -57,41 +57,15 @@ enum {
static unsigned int get_joining_type (hb_codepoint_t u, hb_unicode_general_category_t gen_cat)
{
- if (likely (hb_in_range<hb_codepoint_t> (u, JOINING_TABLE_FIRST, JOINING_TABLE_LAST))) {
- unsigned int j_type = joining_table[u - JOINING_TABLE_FIRST];
- if (likely (j_type != JOINING_TYPE_X))
- return j_type;
- }
-
- /* Mongolian joining data is not in ArabicJoining.txt yet. */
- if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x1800, 0x18AF)))
- {
- if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x1880, 0x1886)))
- return JOINING_TYPE_U;
-
- /* All letters, SIBE SYLLABLE BOUNDARY MARKER, and NIRUGU are D */
- if ((FLAG(gen_cat) & (FLAG (HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER) |
- FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER)))
- || u == 0x1807 || u == 0x180A)
- return JOINING_TYPE_D;
- }
-
- /* 'Phags-pa joining data is not in ArabicJoining.txt yet. */
- if (unlikely (hb_in_range<hb_codepoint_t> (u, 0xA840, 0xA872)))
- {
- if (unlikely (u == 0xA872))
- return JOINING_TYPE_L;
-
- return JOINING_TYPE_D;
- }
-
- if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x200C, 0x200D)))
- {
- return u == 0x200C ? JOINING_TYPE_U : JOINING_TYPE_C;
- }
-
- return (FLAG(gen_cat) & (FLAG(HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) | FLAG(HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | FLAG(HB_UNICODE_GENERAL_CATEGORY_FORMAT))) ?
- JOINING_TYPE_T : JOINING_TYPE_U;
+ unsigned int j_type = joining_type(u);
+ if (likely (j_type != JOINING_TYPE_X))
+ return j_type;
+
+ return (FLAG(gen_cat) &
+ (FLAG(HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) |
+ FLAG(HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) |
+ FLAG(HB_UNICODE_GENERAL_CATEGORY_FORMAT))
+ ) ? JOINING_TYPE_T : JOINING_TYPE_U;
}
static const hb_tag_t arabic_features[] =
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-default.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-default.cc
index f7f097eedaa..f7f097eedaa 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-default.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-default.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-hangul.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-hangul.cc
index 47aa44fedba..47aa44fedba 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-hangul.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-hangul.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-hebrew.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-hebrew.cc
index 6bb6043f652..6bb6043f652 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-hebrew.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-hebrew.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic-machine.hh
index 5fbdcc8366e..5fbdcc8366e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic-machine.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic-machine.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic-machine.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic-machine.rl
index f6768a581f2..f6768a581f2 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic-machine.rl
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic-machine.rl
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic-private.hh
index 266adbcd716..d8dfc6507d9 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic-private.hh
@@ -105,57 +105,74 @@ enum indic_position_t {
/* Categories used in IndicSyllabicCategory.txt from UCD. */
enum indic_syllabic_category_t {
- INDIC_SYLLABIC_CATEGORY_OTHER = OT_X,
-
- INDIC_SYLLABIC_CATEGORY_AVAGRAHA = OT_Symbol,
- INDIC_SYLLABIC_CATEGORY_BINDU = OT_SM,
- INDIC_SYLLABIC_CATEGORY_CONSONANT = OT_C,
- INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD = OT_C,
- INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL = OT_CM,
- INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER = OT_C,
- INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL = OT_CM,
- INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER = OT_PLACEHOLDER,
- INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED = OT_CM,
- INDIC_SYLLABIC_CATEGORY_CONSONANT_REPHA = OT_Repha,
- INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER = OT_X,
- INDIC_SYLLABIC_CATEGORY_NUKTA = OT_N,
- INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER = OT_RS,
- INDIC_SYLLABIC_CATEGORY_TONE_LETTER = OT_X,
- INDIC_SYLLABIC_CATEGORY_TONE_MARK = OT_N,
- INDIC_SYLLABIC_CATEGORY_VIRAMA = OT_H,
- INDIC_SYLLABIC_CATEGORY_VISARGA = OT_SM,
- INDIC_SYLLABIC_CATEGORY_VOWEL = OT_V,
- INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT = OT_M,
- INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT = OT_V
+ INDIC_SYLLABIC_CATEGORY_OTHER = OT_X,
+
+ INDIC_SYLLABIC_CATEGORY_AVAGRAHA = OT_Symbol,
+ INDIC_SYLLABIC_CATEGORY_BINDU = OT_SM,
+ INDIC_SYLLABIC_CATEGORY_BRAHMI_JOINING_NUMBER = OT_PLACEHOLDER, /* TODO */
+ INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK = OT_A,
+ INDIC_SYLLABIC_CATEGORY_CONSONANT = OT_C,
+ INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD = OT_C,
+ INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL = OT_CM,
+ INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER = OT_C,
+ INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL = OT_CM,
+ INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER = OT_PLACEHOLDER,
+ INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA = OT_Repha,
+ INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED = OT_CM,
+ INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA = OT_N,
+ INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK = OT_SM,
+ INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER = OT_H, /* TODO */
+ INDIC_SYLLABIC_CATEGORY_JOINER = OT_ZWJ,
+ INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER = OT_X,
+ INDIC_SYLLABIC_CATEGORY_NON_JOINER = OT_ZWNJ,
+ INDIC_SYLLABIC_CATEGORY_NUKTA = OT_N,
+ INDIC_SYLLABIC_CATEGORY_NUMBER = OT_PLACEHOLDER,
+ INDIC_SYLLABIC_CATEGORY_NUMBER_JOINER = OT_PLACEHOLDER, /* TODO */
+ INDIC_SYLLABIC_CATEGORY_PURE_KILLER = OT_H, /* TODO */
+ INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER = OT_RS,
+ INDIC_SYLLABIC_CATEGORY_TONE_LETTER = OT_X,
+ INDIC_SYLLABIC_CATEGORY_TONE_MARK = OT_N,
+ INDIC_SYLLABIC_CATEGORY_VIRAMA = OT_H,
+ INDIC_SYLLABIC_CATEGORY_VISARGA = OT_SM,
+ INDIC_SYLLABIC_CATEGORY_VOWEL = OT_V,
+ INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT = OT_M,
+ INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT = OT_V
};
/* Categories used in IndicSMatraCategory.txt from UCD */
enum indic_matra_category_t {
- INDIC_MATRA_CATEGORY_NOT_APPLICABLE = POS_END,
+ INDIC_MATRA_CATEGORY_NOT_APPLICABLE = POS_END,
- INDIC_MATRA_CATEGORY_LEFT = POS_PRE_C,
- INDIC_MATRA_CATEGORY_TOP = POS_ABOVE_C,
- INDIC_MATRA_CATEGORY_BOTTOM = POS_BELOW_C,
- INDIC_MATRA_CATEGORY_RIGHT = POS_POST_C,
+ INDIC_MATRA_CATEGORY_LEFT = POS_PRE_C,
+ INDIC_MATRA_CATEGORY_TOP = POS_ABOVE_C,
+ INDIC_MATRA_CATEGORY_BOTTOM = POS_BELOW_C,
+ INDIC_MATRA_CATEGORY_RIGHT = POS_POST_C,
/* These should resolve to the position of the last part of the split sequence. */
- INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT,
- INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT,
- INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM = INDIC_MATRA_CATEGORY_BOTTOM,
- INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT,
- INDIC_MATRA_CATEGORY_TOP_AND_LEFT = INDIC_MATRA_CATEGORY_TOP,
- INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT,
- INDIC_MATRA_CATEGORY_TOP_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT,
-
- INDIC_MATRA_CATEGORY_INVISIBLE = INDIC_MATRA_CATEGORY_NOT_APPLICABLE,
- INDIC_MATRA_CATEGORY_OVERSTRUCK = POS_AFTER_MAIN,
- INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT = POS_PRE_M
+ INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT,
+ INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT,
+ INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM = INDIC_MATRA_CATEGORY_BOTTOM,
+ INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT,
+ INDIC_MATRA_CATEGORY_TOP_AND_LEFT = INDIC_MATRA_CATEGORY_TOP,
+ INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT,
+ INDIC_MATRA_CATEGORY_TOP_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT,
+
+ INDIC_MATRA_CATEGORY_OVERSTRUCK = POS_AFTER_MAIN,
+ INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT = POS_PRE_M
};
/* Note: We use ASSERT_STATIC_EXPR_ZERO() instead of ASSERT_STATIC_EXPR() and the comma operation
* because gcc fails to optimize the latter and fills the table in at runtime. */
#define INDIC_COMBINE_CATEGORIES(S,M) \
- (ASSERT_STATIC_EXPR_ZERO (M == INDIC_MATRA_CATEGORY_NOT_APPLICABLE || (S == INDIC_SYLLABIC_CATEGORY_VIRAMA || S == INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT)) + \
+ (ASSERT_STATIC_EXPR_ZERO (M == INDIC_MATRA_CATEGORY_NOT_APPLICABLE || \
+ ( \
+ S == INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL || \
+ S == INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK || \
+ S == INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER || \
+ S == INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA || \
+ S == INDIC_SYLLABIC_CATEGORY_VIRAMA || \
+ S == INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT || \
+ false)) + \
ASSERT_STATIC_EXPR_ZERO (S < 255 && M < 255) + \
((M << 8) | S))
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic-table.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic-table.cc
index 18a022bc507..69da6507c3b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic-table.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic-table.cc
@@ -6,54 +6,63 @@
*
* on files with these headers:
*
- * # IndicSyllabicCategory-6.2.0.txt
- * # Date: 2012-05-15, 21:12:00 GMT [KW]
- * # IndicMatraCategory-6.2.0.txt
- * # Date: 2012-05-15, 21:10:00 GMT [KW]
- * # Blocks-6.2.0.txt
- * # Date: 2012-05-14, 22:42:00 GMT [KW, LI]
+ * # IndicSyllabicCategory-7.0.0.txt
+ * # Date: 2014-06-03, 07:00:00 GMT [KW, LI, AG, RP]
+ * # IndicMatraCategory-7.0.0.txt
+ * # Date: 2014-06-03, 07:00:00 GMT [KW, LI, AG, RP]
+ * # Blocks-7.0.0.txt
+ * # Date: 2014-04-03, 23:23:00 GMT [RP, KW]
*/
#include "hb-ot-shape-complex-indic-private.hh"
-#define ISC_A INDIC_SYLLABIC_CATEGORY_AVAGRAHA /* 11 chars; Avagraha */
-#define ISC_Bi INDIC_SYLLABIC_CATEGORY_BINDU /* 34 chars; Bindu */
-#define ISC_C INDIC_SYLLABIC_CATEGORY_CONSONANT /* 123 chars; Consonant */
-#define ISC_CD INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD /* 2 chars; Consonant_Dead */
-#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL /* 17 chars; Consonant_Final */
-#define ISC_CHL INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER /* 1 chars; Consonant_Head_Letter */
-#define ISC_CM INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL /* 12 chars; Consonant_Medial */
-#define ISC_CP INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER /* 4 chars; Consonant_Placeholder */
-#define ISC_CR INDIC_SYLLABIC_CATEGORY_CONSONANT_REPHA /* 5 chars; Consonant_Repha */
-#define ISC_CS INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED /* 10 chars; Consonant_Subjoined */
+#define ISC_A INDIC_SYLLABIC_CATEGORY_AVAGRAHA /* 13 chars; Avagraha */
+#define ISC_Bi INDIC_SYLLABIC_CATEGORY_BINDU /* 59 chars; Bindu */
+#define ISC_BJN INDIC_SYLLABIC_CATEGORY_BRAHMI_JOINING_NUMBER /* 20 chars; Brahmi_Joining_Number */
+#define ISC_Ca INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK /* 30 chars; Cantillation_Mark */
+#define ISC_C INDIC_SYLLABIC_CATEGORY_CONSONANT /* 1744 chars; Consonant */
+#define ISC_CD INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD /* 7 chars; Consonant_Dead */
+#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL /* 61 chars; Consonant_Final */
+#define ISC_CHL INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER /* 5 chars; Consonant_Head_Letter */
+#define ISC_CM INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL /* 19 chars; Consonant_Medial */
+#define ISC_CP INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER /* 11 chars; Consonant_Placeholder */
+#define ISC_CPR INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA /* 1 chars; Consonant_Preceding_Repha */
+#define ISC_CS INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED /* 61 chars; Consonant_Subjoined */
+#define ISC_CSR INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA /* 4 chars; Consonant_Succeeding_Repha */
+#define ISC_GM INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK /* 2 chars; Gemination_Mark */
+#define ISC_IS INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER /* 7 chars; Invisible_Stacker */
+#define ISC_ZWJ INDIC_SYLLABIC_CATEGORY_JOINER /* 1 chars; Joiner */
#define ISC_ML INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER /* 1 chars; Modifying_Letter */
-#define ISC_N INDIC_SYLLABIC_CATEGORY_NUKTA /* 12 chars; Nukta */
+#define ISC_ZWNJ INDIC_SYLLABIC_CATEGORY_NON_JOINER /* 1 chars; Non_Joiner */
+#define ISC_N INDIC_SYLLABIC_CATEGORY_NUKTA /* 18 chars; Nukta */
+#define ISC_Nd INDIC_SYLLABIC_CATEGORY_NUMBER /* 408 chars; Number */
+#define ISC_NJ INDIC_SYLLABIC_CATEGORY_NUMBER_JOINER /* 1 chars; Number_Joiner */
#define ISC_x INDIC_SYLLABIC_CATEGORY_OTHER /* 1 chars; Other */
-#define ISC_RS INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER /* 1 chars; Register_Shifter */
-#define ISC_TL INDIC_SYLLABIC_CATEGORY_TONE_LETTER /* 3 chars; Tone_Letter */
-#define ISC_TM INDIC_SYLLABIC_CATEGORY_TONE_MARK /* 16 chars; Tone_Mark */
-#define ISC_V INDIC_SYLLABIC_CATEGORY_VIRAMA /* 34 chars; Virama */
-#define ISC_Vs INDIC_SYLLABIC_CATEGORY_VISARGA /* 25 chars; Visarga */
-#define ISC_Vo INDIC_SYLLABIC_CATEGORY_VOWEL /* 5 chars; Vowel */
-#define ISC_M INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT /* 165 chars; Vowel_Dependent */
-#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT /* 59 chars; Vowel_Independent */
-
-#define IMC_B INDIC_MATRA_CATEGORY_BOTTOM /* 65 chars; Bottom */
+#define ISC_PK INDIC_SYLLABIC_CATEGORY_PURE_KILLER /* 15 chars; Pure_Killer */
+#define ISC_RS INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER /* 3 chars; Register_Shifter */
+#define ISC_TL INDIC_SYLLABIC_CATEGORY_TONE_LETTER /* 7 chars; Tone_Letter */
+#define ISC_TM INDIC_SYLLABIC_CATEGORY_TONE_MARK /* 62 chars; Tone_Mark */
+#define ISC_V INDIC_SYLLABIC_CATEGORY_VIRAMA /* 22 chars; Virama */
+#define ISC_Vs INDIC_SYLLABIC_CATEGORY_VISARGA /* 29 chars; Visarga */
+#define ISC_Vo INDIC_SYLLABIC_CATEGORY_VOWEL /* 30 chars; Vowel */
+#define ISC_M INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT /* 553 chars; Vowel_Dependent */
+#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT /* 395 chars; Vowel_Independent */
+
+#define IMC_B INDIC_MATRA_CATEGORY_BOTTOM /* 142 chars; Bottom */
#define IMC_BR INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT /* 2 chars; Bottom_And_Right */
-#define IMC_I INDIC_MATRA_CATEGORY_INVISIBLE /* 6 chars; Invisible */
-#define IMC_L INDIC_MATRA_CATEGORY_LEFT /* 30 chars; Left */
-#define IMC_LR INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT /* 8 chars; Left_And_Right */
+#define IMC_L INDIC_MATRA_CATEGORY_LEFT /* 57 chars; Left */
+#define IMC_LR INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT /* 21 chars; Left_And_Right */
#define IMC_x INDIC_MATRA_CATEGORY_NOT_APPLICABLE /* 1 chars; Not_Applicable */
#define IMC_O INDIC_MATRA_CATEGORY_OVERSTRUCK /* 2 chars; Overstruck */
-#define IMC_R INDIC_MATRA_CATEGORY_RIGHT /* 75 chars; Right */
-#define IMC_T INDIC_MATRA_CATEGORY_TOP /* 83 chars; Top */
-#define IMC_TB INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM /* 6 chars; Top_And_Bottom */
+#define IMC_R INDIC_MATRA_CATEGORY_RIGHT /* 163 chars; Right */
+#define IMC_T INDIC_MATRA_CATEGORY_TOP /* 169 chars; Top */
+#define IMC_TB INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM /* 10 chars; Top_And_Bottom */
#define IMC_TBR INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT /* 1 chars; Top_And_Bottom_And_Right */
-#define IMC_TL INDIC_MATRA_CATEGORY_TOP_AND_LEFT /* 4 chars; Top_And_Left */
-#define IMC_TLR INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT /* 2 chars; Top_And_Left_And_Right */
-#define IMC_TR INDIC_MATRA_CATEGORY_TOP_AND_RIGHT /* 8 chars; Top_And_Right */
-#define IMC_VOL INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT /* 5 chars; Visual_Order_Left */
+#define IMC_TL INDIC_MATRA_CATEGORY_TOP_AND_LEFT /* 6 chars; Top_And_Left */
+#define IMC_TLR INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT /* 4 chars; Top_And_Left_And_Right */
+#define IMC_TR INDIC_MATRA_CATEGORY_TOP_AND_RIGHT /* 13 chars; Top_And_Right */
+#define IMC_VOL INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT /* 15 chars; Visual_Order_Left */
#define _(S,M) INDIC_COMBINE_CATEGORIES (ISC_##S, IMC_##M)
@@ -61,10 +70,26 @@
static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
-#define indic_offset_0x0900 0
+#define indic_offset_0x0028 0
- /* Devanagari (0900..097F) */
+ /* Basic Latin */
+
+ /* 0028 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(CP,x), _(x,x), _(x,x),
+ /* 0030 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 0038 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+
+#define indic_offset_0x00d0 24
+
+
+ /* Latin-1 Supplement */
+
+ /* 00D0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(CP,x),
+
+#define indic_offset_0x0900 32
+
+
+ /* Devanagari */
/* 0900 */ _(Bi,x), _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* 0908 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -76,14 +101,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0938 */ _(C,x), _(C,x), _(M,T), _(M,R), _(N,x), _(A,x), _(M,R), _(M,L),
/* 0940 */ _(M,R), _(M,B), _(M,B), _(M,B), _(M,B), _(M,T), _(M,T), _(M,T),
/* 0948 */ _(M,T), _(M,R), _(M,R), _(M,R), _(M,R), _(V,B), _(M,L), _(M,R),
- /* 0950 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(M,T), _(M,B), _(M,B),
+ /* 0950 */ _(x,x), _(TM,x), _(TM,x), _(x,x), _(x,x), _(M,T), _(M,B), _(M,B),
/* 0958 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0960 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0968 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 0960 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
+ /* 0968 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0970 */ _(x,x), _(x,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
- /* 0978 */ _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 0978 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* Bengali (0980..09FF) */
+ /* Bengali */
/* 0980 */ _(x,x), _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0988 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(x,x), _(VI,x),
@@ -97,12 +122,12 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 09C8 */ _(M,L), _(x,x), _(x,x), _(M,LR), _(M,LR), _(V,B), _(CD,x), _(x,x),
/* 09D0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(M,R),
/* 09D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(C,x), _(C,x), _(x,x), _(C,x),
- /* 09E0 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 09E8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 09E0 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
+ /* 09E8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 09F0 */ _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 09F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Gurmukhi (0A00..0A7F) */
+ /* Gurmukhi */
/* 0A00 */ _(x,x), _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0A08 */ _(VI,x), _(VI,x), _(VI,x), _(x,x), _(x,x), _(x,x), _(x,x), _(VI,x),
@@ -116,12 +141,12 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0A48 */ _(M,T), _(x,x), _(x,x), _(M,T), _(M,T), _(V,B), _(x,x), _(x,x),
/* 0A50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0A58 */ _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(x,x), _(C,x), _(x,x),
- /* 0A60 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0A68 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0A70 */ _(Bi,x), _(x,x), _(CP,x), _(CP,x), _(x,x), _(CM,x), _(x,x), _(x,x),
+ /* 0A60 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
+ /* 0A68 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 0A70 */ _(Bi,x), _(GM,T), _(CP,x), _(CP,x), _(x,x), _(CM,x), _(x,x), _(x,x),
/* 0A78 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Gujarati (0A80..0AFF) */
+ /* Gujarati */
/* 0A80 */ _(x,x), _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0A88 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(VI,x),
@@ -135,12 +160,12 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0AC8 */ _(M,T), _(M,TR), _(x,x), _(M,R), _(M,R), _(V,B), _(x,x), _(x,x),
/* 0AD0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0AD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0AE0 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0AE8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 0AE0 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
+ /* 0AE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0AF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0AF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Oriya (0B00..0B7F) */
+ /* Oriya */
/* 0B00 */ _(x,x), _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0B08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(x,x), _(VI,x),
@@ -154,12 +179,12 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0B48 */ _(M,TL), _(x,x), _(x,x), _(M,LR),_(M,TLR), _(V,B), _(x,x), _(x,x),
/* 0B50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(M,T), _(M,TR),
/* 0B58 */ _(x,x), _(x,x), _(x,x), _(x,x), _(C,x), _(C,x), _(x,x), _(C,x),
- /* 0B60 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0B68 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 0B60 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
+ /* 0B68 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0B70 */ _(x,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0B78 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Tamil (0B80..0BFF) */
+ /* Tamil */
/* 0B80 */ _(x,x), _(x,x), _(Bi,x), _(ML,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0B88 */ _(VI,x), _(VI,x), _(VI,x), _(x,x), _(x,x), _(x,x), _(VI,x), _(VI,x),
@@ -173,33 +198,33 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0BC8 */ _(M,L), _(x,x), _(M,LR), _(M,LR), _(M,LR), _(V,T), _(x,x), _(x,x),
/* 0BD0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(M,R),
/* 0BD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0BE0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0BE8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 0BE0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
+ /* 0BE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0BF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0BF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Telugu (0C00..0C7F) */
+ /* Telugu */
- /* 0C00 */ _(x,x), _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
+ /* 0C00 */ _(Bi,x), _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0C08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(VI,x), _(VI,x),
/* 0C10 */ _(VI,x), _(x,x), _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x),
/* 0C18 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0C20 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0C28 */ _(C,x), _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0C30 */ _(C,x), _(C,x), _(C,x), _(C,x), _(x,x), _(C,x), _(C,x), _(C,x),
+ /* 0C30 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0C38 */ _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(A,x), _(M,T), _(M,T),
/* 0C40 */ _(M,T), _(M,R), _(M,R), _(M,R), _(M,R), _(x,x), _(M,T), _(M,T),
/* 0C48 */ _(M,TB), _(x,x), _(M,T), _(M,T), _(M,T), _(V,T), _(x,x), _(x,x),
/* 0C50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(M,T), _(M,B), _(x,x),
/* 0C58 */ _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0C60 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0C68 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 0C60 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
+ /* 0C68 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0C70 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0C78 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Kannada (0C80..0CFF) */
+ /* Kannada */
- /* 0C80 */ _(x,x), _(x,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
+ /* 0C80 */ _(x,x), _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0C88 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(VI,x), _(VI,x),
/* 0C90 */ _(VI,x), _(x,x), _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x),
/* 0C98 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -211,14 +236,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0CC8 */ _(M,TR), _(x,x), _(M,TR), _(M,TR), _(M,T), _(V,T), _(x,x), _(x,x),
/* 0CD0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(M,R), _(M,R), _(x,x),
/* 0CD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(C,x), _(x,x),
- /* 0CE0 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0CE8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 0CE0 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
+ /* 0CE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0CF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0CF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Malayalam (0D00..0D7F) */
+ /* Malayalam */
- /* 0D00 */ _(x,x), _(x,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
+ /* 0D00 */ _(x,x), _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0D08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(VI,x), _(VI,x),
/* 0D10 */ _(VI,x), _(x,x), _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x),
/* 0D18 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -227,15 +252,15 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0D30 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0D38 */ _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(A,x), _(M,R), _(M,R),
/* 0D40 */ _(M,R), _(M,R), _(M,R), _(M,B), _(M,B), _(x,x), _(M,L), _(M,L),
- /* 0D48 */ _(M,L), _(x,x), _(M,LR), _(M,LR), _(M,LR), _(V,T), _(CR,x), _(x,x),
+ /* 0D48 */ _(M,L), _(x,x), _(M,LR), _(M,LR), _(M,LR), _(V,T),_(CPR,x), _(x,x),
/* 0D50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(M,R),
/* 0D58 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0D60 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0D68 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 0D60 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
+ /* 0D68 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0D70 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0D78 */ _(x,x), _(x,x), _(CD,x), _(CD,x), _(CD,x), _(CD,x), _(CD,x), _(CD,x),
- /* Sinhala (0D80..0DFF) */
+ /* Sinhala */
/* 0D80 */ _(x,x), _(x,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0D88 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -248,86 +273,15 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0DC0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(x,x),
/* 0DC8 */ _(x,x), _(x,x), _(V,T), _(x,x), _(x,x), _(x,x), _(x,x), _(M,R),
/* 0DD0 */ _(M,R), _(M,R), _(M,T), _(M,T), _(M,B), _(x,x), _(M,B), _(x,x),
- /* 0DD8 */ _(M,R), _(M,L), _(M,TL), _(M,L), _(M,LR), _(M,LR), _(M,LR), _(M,R),
- /* 0DE0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0DE8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 0DD8 */ _(M,R), _(M,L), _(M,TL), _(M,L), _(M,LR),_(M,TLR), _(M,LR), _(M,R),
+ /* 0DE0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
+ /* 0DE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0DF0 */ _(x,x), _(x,x), _(M,R), _(M,R), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0DF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-
- /* Thai (0E00..0E7F) */
-
- /* 0E00 */ _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0E08 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0E10 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0E18 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0E20 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0E28 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(x,x),
- /* 0E30 */ _(M,R), _(M,T), _(M,R), _(M,R), _(M,T), _(M,T), _(M,T), _(M,T),
- /* 0E38 */ _(M,B), _(M,B), _(V,B), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0E40 */_(M,VOL),_(M,VOL),_(M,VOL),_(M,VOL),_(M,VOL), _(M,R), _(x,x), _(M,T),
- /* 0E48 */ _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(x,x), _(Bi,x), _(V,T), _(x,x),
- /* 0E50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0E58 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0E60 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0E68 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0E70 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0E78 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-
- /* Lao (0E80..0EFF) */
-
- /* 0E80 */ _(x,x), _(C,x), _(C,x), _(x,x), _(C,x), _(x,x), _(x,x), _(C,x),
- /* 0E88 */ _(C,x), _(x,x), _(C,x), _(x,x), _(x,x), _(C,x), _(x,x), _(x,x),
- /* 0E90 */ _(x,x), _(x,x), _(x,x), _(x,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0E98 */ _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0EA0 */ _(x,x), _(C,x), _(C,x), _(C,x), _(x,x), _(C,x), _(x,x), _(C,x),
- /* 0EA8 */ _(x,x), _(x,x), _(C,x), _(C,x), _(x,x), _(C,x), _(C,x), _(x,x),
- /* 0EB0 */ _(M,R), _(M,T), _(M,R), _(M,R), _(M,T), _(M,T), _(M,T), _(M,T),
- /* 0EB8 */ _(M,B), _(M,B), _(x,x), _(M,T), _(CM,x), _(CM,x), _(x,x), _(x,x),
- /* 0EC0 */_(M,VOL),_(M,VOL),_(M,VOL),_(M,VOL),_(M,VOL), _(x,x), _(x,x), _(x,x),
- /* 0EC8 */ _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(x,x), _(Bi,x), _(x,x), _(x,x),
- /* 0ED0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0ED8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(C,x), _(C,x), _(x,x), _(x,x),
- /* 0EE0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0EE8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0EF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0EF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-
- /* Tibetan (0F00..0FFF) */
-
- /* 0F00 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F08 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F10 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F18 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F20 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F28 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F30 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F38 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F40 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0F48 */ _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0F50 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0F58 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0F60 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0F68 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(x,x),
- /* 0F70 */ _(x,x), _(M,B), _(M,T), _(M,TB), _(M,B), _(M,B), _(M,TB), _(M,TB),
- /* 0F78 */ _(M,TB), _(M,TB), _(M,T), _(M,T), _(M,T), _(M,T), _(Bi,x), _(Vs,x),
- /* 0F80 */ _(M,T), _(M,TB), _(Bi,x), _(Bi,x), _(V,B), _(A,x), _(x,x), _(x,x),
- /* 0F88 */_(CHL,x),_(CHL,x),_(CHL,x),_(CHL,x),_(CHL,x), _(CS,x), _(CS,x), _(CS,x),
- /* 0F90 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
- /* 0F98 */ _(x,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
- /* 0FA0 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
- /* 0FA8 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
- /* 0FB0 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
- /* 0FB8 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(x,x), _(x,x), _(x,x),
- /* 0FC0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0FC8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0FD0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0FD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0FE0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0FE8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0FF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0FF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-
- /* Myanmar (1000..109F) */
+
+#define indic_offset_0x1000 1304
+
+
+ /* Myanmar */
/* 1000 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1008 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -336,9 +290,9 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1020 */ _(C,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* 1028 */ _(VI,x), _(VI,x), _(VI,x), _(M,R), _(M,R), _(M,T), _(M,T), _(M,B),
/* 1030 */ _(M,B), _(M,L), _(M,T), _(M,T), _(M,T), _(M,T), _(Bi,x), _(TM,x),
- /* 1038 */ _(Vs,x), _(V,I), _(V,T), _(CM,x), _(CM,x), _(CM,x), _(CM,x), _(C,x),
- /* 1040 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1048 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 1038 */ _(Vs,x), _(IS,x), _(PK,T), _(CM,x), _(CM,x), _(CM,x), _(CM,x), _(C,x),
+ /* 1040 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 1048 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(CP,x), _(x,x),
/* 1050 */ _(C,x), _(C,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(M,R), _(M,R),
/* 1058 */ _(M,B), _(M,B), _(C,x), _(C,x), _(C,x), _(C,x), _(CM,x), _(CM,x),
/* 1060 */ _(CM,x), _(C,x), _(M,R), _(TM,x), _(TM,x), _(C,x), _(C,x), _(M,R),
@@ -347,41 +301,41 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1078 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1080 */ _(C,x), _(C,x), _(CM,x), _(M,R), _(M,L), _(M,T), _(M,T), _(TM,x),
/* 1088 */ _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(C,x), _(TM,x),
- /* 1090 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1098 */ _(x,x), _(x,x), _(TM,x), _(TM,x), _(M,R), _(M,T), _(x,x), _(x,x),
+ /* 1090 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 1098 */ _(Nd,x), _(Nd,x), _(TM,x), _(TM,x), _(M,R), _(M,T), _(x,x), _(x,x),
-#define indic_offset_0x1700 1952
+#define indic_offset_0x1700 1464
- /* Tagalog (1700..171F) */
+ /* Tagalog */
/* 1700 */ _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1708 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(x,x), _(C,x), _(C,x),
- /* 1710 */ _(C,x), _(C,x), _(M,T), _(M,B), _(V,B), _(x,x), _(x,x), _(x,x),
+ /* 1710 */ _(C,x), _(C,x), _(M,T), _(M,B), _(PK,B), _(x,x), _(x,x), _(x,x),
/* 1718 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Hanunoo (1720..173F) */
+ /* Hanunoo */
/* 1720 */ _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1728 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 1730 */ _(C,x), _(C,x), _(M,T), _(M,B), _(V,B), _(x,x), _(x,x), _(x,x),
+ /* 1730 */ _(C,x), _(C,x), _(M,T), _(M,B), _(PK,B), _(x,x), _(x,x), _(x,x),
/* 1738 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Buhid (1740..175F) */
+ /* Buhid */
/* 1740 */ _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1748 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1750 */ _(C,x), _(C,x), _(M,T), _(M,B), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1758 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Tagbanwa (1760..177F) */
+ /* Tagbanwa */
/* 1760 */ _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1768 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(x,x), _(C,x), _(C,x),
/* 1770 */ _(C,x), _(x,x), _(M,T), _(M,B), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1778 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Khmer (1780..17FF) */
+ /* Khmer */
/* 1780 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1788 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -392,31 +346,29 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 17B0 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(x,x), _(M,R), _(M,T),
/* 17B8 */ _(M,T), _(M,T), _(M,T), _(M,B), _(M,B), _(M,B), _(M,TL),_(M,TLR),
/* 17C0 */ _(M,LR), _(M,L), _(M,L), _(M,L), _(M,LR), _(M,LR), _(Bi,x), _(Vs,x),
- /* 17C8 */ _(M,R), _(RS,x), _(RS,x), _(x,x), _(CR,x), _(x,x), _(x,x), _(x,x),
- /* 17D0 */ _(x,x), _(V,T), _(V,I), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 17C8 */ _(M,R), _(RS,T), _(RS,T), _(RS,T),_(CSR,T), _(M,T), _(M,T), _(M,T),
+ /* 17D0 */ _(M,T), _(PK,T), _(IS,x), _(M,T), _(x,x), _(x,x), _(x,x), _(x,x),
/* 17D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(A,x), _(x,x), _(x,x), _(x,x),
- /* 17E0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 17E8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 17F0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 17F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 17E0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 17E8 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x1900 2208
+#define indic_offset_0x1900 1704
- /* Limbu (1900..194F) */
+ /* Limbu */
/* 1900 */ _(CP,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1908 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1910 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 1918 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(x,x),
+ /* 1918 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(x,x),
/* 1920 */ _(M,T), _(M,T), _(M,B), _(M,R), _(M,R), _(M,TR), _(M,TR), _(M,T),
/* 1928 */ _(M,T), _(CS,x), _(CS,x), _(CS,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1930 */ _(CF,x), _(CF,x), _(Bi,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
/* 1938 */ _(CF,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1940 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1948 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 1940 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
+ /* 1948 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
- /* Tai Le (1950..197F) */
+ /* Tai Le */
/* 1950 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1958 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -425,7 +377,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1970 */ _(TL,x), _(TL,x), _(TL,x), _(TL,x), _(TL,x), _(x,x), _(x,x), _(x,x),
/* 1978 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* New Tai Lue (1980..19DF) */
+ /* New Tai Lue */
/* 1980 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1988 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -437,24 +389,21 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 19B8 */ _(M,R), _(M,R), _(M,L), _(M,R), _(M,R), _(M,R), _(M,R), _(M,R),
/* 19C0 */ _(M,R), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
/* 19C8 */ _(TM,x), _(TM,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 19D0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 19D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-
- /* FILLER (19E0..19FF) */
-
+ /* 19D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 19D8 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 19E0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 19E8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 19F0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 19F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Buginese (1A00..1A1F) */
+ /* Buginese */
/* 1A00 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1A08 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1A10 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(M,T),
- /* 1A18 */ _(M,B), _(M,L), _(M,R), _(M,L), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 1A18 */ _(M,B), _(M,L), _(M,R), _(M,T), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Tai Tham (1A20..1AAF) */
+ /* Tai Tham */
/* 1A20 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1A28 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -462,25 +411,23 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1A38 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1A40 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1A48 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(VI,x), _(VI,x), _(VI,x),
- /* 1A50 */ _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(CM,x), _(CM,x), _(CF,x),
+ /* 1A50 */ _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(CM,L), _(CM,x), _(CF,x),
/* 1A58 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(x,x),
- /* 1A60 */ _(V,I), _(M,R), _(M,T), _(M,R), _(M,R), _(M,T), _(M,T), _(M,T),
+ /* 1A60 */ _(IS,x), _(M,R), _(M,T), _(M,R), _(M,R), _(M,T), _(M,T), _(M,T),
/* 1A68 */ _(M,T), _(M,B), _(M,B), _(M,T), _(M,B), _(M,R), _(M,L), _(M,L),
/* 1A70 */ _(M,L), _(M,L), _(M,L), _(M,T), _(M,T), _(TM,x), _(TM,x), _(TM,x),
/* 1A78 */ _(TM,x), _(TM,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1A80 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1A88 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1A90 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1A98 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1AA0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1AA8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 1A80 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 1A88 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 1A90 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 1A98 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x1b00 2640
+#define indic_offset_0x1b00 2120
- /* Balinese (1B00..1B7F) */
+ /* Balinese */
- /* 1B00 */ _(Bi,x), _(Bi,x), _(Bi,x), _(CR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x),
+ /* 1B00 */ _(Bi,x), _(Bi,x), _(Bi,x),_(CSR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x),
/* 1B08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* 1B10 */ _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1B18 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -490,36 +437,36 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1B38 */ _(M,B), _(M,B), _(M,B), _(M,BR), _(M,TB),_(M,TBR), _(M,L), _(M,L),
/* 1B40 */ _(M,LR), _(M,LR), _(M,T), _(M,TR), _(V,R), _(C,x), _(C,x), _(C,x),
/* 1B48 */ _(C,x), _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1B50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1B58 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 1B50 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 1B58 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1B60 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1B68 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1B70 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1B78 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Sundanese (1B80..1BBF) */
+ /* Sundanese */
- /* 1B80 */ _(Bi,x), _(CR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
+ /* 1B80 */ _(Bi,x),_(CSR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* 1B88 */ _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1B90 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1B98 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1BA0 */ _(C,x), _(CS,x), _(CS,x), _(CS,x), _(M,T), _(M,B), _(M,L), _(M,R),
- /* 1BA8 */ _(M,T), _(M,T), _(V,R), _(V,x), _(CS,x), _(CS,x), _(C,x), _(C,x),
- /* 1BB0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1BB8 */ _(x,x), _(x,x), _(A,x), _(C,x), _(C,x), _(C,x), _(CF,x), _(CF,x),
+ /* 1BA8 */ _(M,T), _(M,T), _(PK,R), _(IS,x), _(CS,x), _(CS,x), _(C,x), _(C,x),
+ /* 1BB0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 1BB8 */ _(Nd,x), _(Nd,x), _(A,x), _(C,x), _(C,x), _(C,x), _(CF,x), _(CF,x),
- /* Batak (1BC0..1BFF) */
+ /* Batak */
/* 1BC0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1BC8 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1BD0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1BD8 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 1BE0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(VI,x), _(VI,x), _(N,x), _(M,x),
- /* 1BE8 */ _(M,x), _(M,x), _(M,x), _(M,x), _(M,x), _(M,x), _(M,x), _(M,x),
- /* 1BF0 */ _(CF,x), _(CF,x), _(V,R), _(V,R), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 1BE0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(VI,x), _(VI,x), _(N,x), _(M,R),
+ /* 1BE8 */ _(M,T), _(M,T), _(M,R), _(M,R), _(M,R), _(M,T), _(M,R), _(M,T),
+ /* 1BF0 */ _(CF,x), _(CF,x), _(PK,R), _(PK,R), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1BF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Lepcha (1C00..1C4F) */
+ /* Lepcha */
/* 1C00 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1C08 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -527,41 +474,45 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1C18 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1C20 */ _(C,x), _(C,x), _(C,x), _(C,x), _(CS,x), _(CS,x), _(M,R), _(M,L),
/* 1C28 */ _(M,L), _(M,TL), _(M,R), _(M,R), _(M,B), _(CF,x), _(CF,x), _(CF,x),
- /* 1C30 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(Bi,x), _(Bi,x), _(x,x), _(N,x),
+ /* 1C30 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(Bi,L), _(Bi,L), _(x,x), _(N,x),
/* 1C38 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1C40 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1C48 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(C,x), _(C,x), _(C,x),
+ /* 1C40 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 1C48 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(C,x), _(C,x), _(C,x),
-#define indic_offset_0x1cd0 2976
+#define indic_offset_0x1cd0 2456
- /* Vedic Extensions (1CD0..1CFF) */
+ /* Vedic Extensions */
- /* 1CD0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1CD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1CE0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 1CD0 */ _(TM,x), _(TM,x), _(TM,x), _(x,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x),
+ /* 1CD8 */ _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(TM,x),
+ /* 1CE0 */ _(TM,x), _(TM,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1CE8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1CF0 */ _(x,x), _(x,x), _(Vs,x), _(Vs,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1CF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 1CF0 */ _(x,x), _(x,x), _(Vs,x), _(Vs,x), _(TM,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0xa800 3024
+#define indic_offset_0x2008 2496
- /* Syloti Nagri (A800..A82F) */
+ /* General Punctuation */
- /* A800 */ _(VI,x), _(VI,x), _(x,x), _(VI,x), _(VI,x), _(VI,x), _(V,T), _(C,x),
+ /* 2008 */ _(x,x), _(x,x), _(x,x), _(x,x),_(ZWNJ,x),_(ZWJ,x), _(x,x), _(x,x),
+ /* 2010 */ _(x,x), _(x,x), _(CP,x), _(CP,x), _(CP,x), _(x,x), _(x,x), _(x,x),
+
+#define indic_offset_0xa800 2512
+
+
+ /* Syloti Nagri */
+
+ /* A800 */ _(VI,x), _(VI,x), _(x,x), _(VI,x), _(VI,x), _(VI,x), _(PK,T), _(C,x),
/* A808 */ _(C,x), _(C,x), _(C,x), _(Bi,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A810 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A818 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A820 */ _(C,x), _(C,x), _(C,x), _(M,R), _(M,R), _(M,B), _(M,T), _(M,R),
/* A828 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-
- /* FILLER (A830..A83F) */
-
/* A830 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A838 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Phags-pa (A840..A87F) */
+ /* Phags-pa */
/* A840 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A848 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -572,7 +523,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A870 */ _(C,x), _(CS,x), _(C,x), _(Bi,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A878 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Saurashtra (A880..A8DF) */
+ /* Saurashtra */
/* A880 */ _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* A888 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -584,44 +535,41 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A8B8 */ _(M,R), _(M,R), _(M,R), _(M,R), _(M,R), _(M,R), _(M,R), _(M,R),
/* A8C0 */ _(M,R), _(M,R), _(M,R), _(M,R), _(V,B), _(x,x), _(x,x), _(x,x),
/* A8C8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A8D0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A8D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* A8D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* A8D8 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* FILLER (A8E0..A8FF) */
+ /* Devanagari Extended */
- /* A8E0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A8E8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A8F0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* A8E0 */ _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x),
+ /* A8E8 */ _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x),
+ /* A8F0 */ _(Ca,x), _(Ca,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A8F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Kayah Li (A900..A92F) */
+ /* Kayah Li */
- /* A900 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A908 */ _(x,x), _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* A900 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* A908 */ _(Nd,x), _(Nd,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A910 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A918 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A920 */ _(C,x), _(C,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x),
/* A928 */ _(Vo,x), _(Vo,x), _(Vo,x), _(TM,x), _(TM,x), _(TM,x), _(x,x), _(x,x),
- /* Rejang (A930..A95F) */
+ /* Rejang */
/* A930 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A938 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A940 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(M,B),
/* A948 */ _(M,B), _(M,B), _(M,T), _(M,B), _(M,B), _(M,B), _(M,B), _(CF,x),
- /* A950 */ _(CF,x), _(CF,x), _(CF,x), _(V,R), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* A950 */ _(CF,x), _(CF,x), _(CF,x), _(PK,R), _(x,x), _(x,x), _(x,x), _(x,x),
/* A958 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-
- /* FILLER (A960..A97F) */
-
/* A960 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A968 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A970 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A978 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Javanese (A980..A9DF) */
+ /* Javanese */
- /* A980 */ _(Bi,x), _(Bi,x), _(CR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
+ /* A980 */ _(Bi,x), _(Bi,x),_(CSR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* A988 */ _(VI,x), _(C,x), _(C,x), _(C,x), _(VI,x), _(VI,x), _(VI,x), _(C,x),
/* A990 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A998 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -631,17 +579,17 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A9B8 */ _(M,B), _(M,B), _(M,L), _(M,L), _(M,T), _(CS,x), _(CM,x), _(CM,x),
/* A9C0 */ _(V,BR), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A9C8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A9D0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A9D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* A9D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* A9D8 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* FILLER (A9E0..A9FF) */
+ /* Myanmar Extended-B */
- /* A9E0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A9E8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A9F0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A9F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* A9E0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(C,x),
+ /* A9E8 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* A9F0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* A9F8 */ _(Nd,x), _(Nd,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(x,x),
- /* Cham (AA00..AA5F) */
+ /* Cham */
/* AA00 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x),
/* AA08 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -649,21 +597,21 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* AA18 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* AA20 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* AA28 */ _(C,x), _(M,T), _(M,T), _(M,T), _(M,T), _(M,B), _(M,T), _(M,L),
- /* AA30 */ _(M,L), _(M,T), _(M,B), _(CM,x), _(CM,x), _(CM,x), _(CM,x), _(x,x),
+ /* AA30 */ _(M,L), _(M,T), _(M,B), _(CM,x), _(CM,L), _(CM,x), _(CM,x), _(x,x),
/* AA38 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* AA40 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
/* AA48 */ _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(x,x), _(x,x),
- /* AA50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* AA58 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* AA50 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* AA58 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Myanmar Extended-A (AA60..AA7F) */
+ /* Myanmar Extended-A */
/* AA60 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* AA68 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* AA70 */ _(x,x), _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* AA78 */ _(x,x), _(x,x), _(C,x), _(TM,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* AA78 */ _(x,x), _(x,x), _(C,x), _(TM,x), _(TM,x), _(TM,x), _(C,x), _(C,x),
- /* Tai Viet (AA80..AADF) */
+ /* Tai Viet */
/* AA80 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* AA88 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -678,31 +626,30 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* AAD0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* AAD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Meetei Mayek Extensions (AAE0..AAFF) */
+ /* Meetei Mayek Extensions */
/* AAE0 */ _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* AAE8 */ _(C,x), _(C,x), _(C,x), _(M,L), _(M,B), _(M,T), _(M,L), _(M,R),
- /* AAF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(Vs,x), _(V,I), _(x,x),
- /* AAF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* AAF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(Vs,x), _(IS,x), _(x,x),
-#define indic_offset_0xabc0 3792
+#define indic_offset_0xabc0 3272
- /* Meetei Mayek (ABC0..ABFF) */
+ /* Meetei Mayek */
/* ABC0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* ABC8 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(VI,x), _(VI,x),
/* ABD0 */ _(C,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* ABD8 */ _(C,x), _(C,x), _(C,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
/* ABE0 */ _(CF,x), _(CF,x), _(CF,x), _(M,R), _(M,R), _(M,T), _(M,R), _(M,R),
- /* ABE8 */ _(M,B), _(M,R), _(M,R), _(x,x), _(TM,x), _(V,B), _(x,x), _(x,x),
- /* ABF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* ABF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* ABE8 */ _(M,B), _(M,R), _(M,R), _(x,x), _(TM,x), _(PK,B), _(x,x), _(x,x),
+ /* ABF0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* ABF8 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x10a00 3856
+#define indic_offset_0x10a00 3336
- /* Kharoshthi (10A00..10A5F) */
+ /* Kharoshthi */
/* 10A00 */ _(C,x), _(M,O), _(M,B), _(M,B), _(x,x), _(M,T), _(M,O), _(x,x),
/* 10A08 */ _(x,x), _(x,x), _(x,x), _(x,x), _(M,B), _(x,x), _(Bi,x), _(Vs,x),
@@ -711,16 +658,13 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 10A20 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 10A28 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 10A30 */ _(C,x), _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 10A38 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(V,I),
- /* 10A40 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 10A48 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 10A50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 10A58 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 10A38 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(IS,x),
+ /* 10A40 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
-#define indic_offset_0x11000 3952
+#define indic_offset_0x11000 3408
- /* Brahmi (11000..1107F) */
+ /* Brahmi */
/* 11000 */ _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 11008 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -732,14 +676,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 11038 */ _(M,T), _(M,T), _(M,T), _(M,T), _(M,B), _(M,B), _(M,B), _(M,B),
/* 11040 */ _(M,B), _(M,B), _(M,T), _(M,T), _(M,T), _(M,T), _(V,T), _(x,x),
/* 11048 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 11050 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 11058 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 11060 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 11068 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 11050 */ _(x,x), _(x,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),
+ /* 11058 */_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),
+ /* 11060 */_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x),_(BJN,x), _(Nd,x), _(Nd,x),
+ /* 11068 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 11070 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 11078 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 11078 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(NJ,x),
- /* Kaithi (11080..110CF) */
+ /* Kaithi */
/* 11080 */ _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* 11088 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x),
@@ -749,13 +693,11 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 110A8 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 110B0 */ _(M,R), _(M,L), _(M,R), _(M,B), _(M,B), _(M,T), _(M,T), _(M,R),
/* 110B8 */ _(M,R), _(V,B), _(N,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 110C0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 110C8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x11100 4160
+#define indic_offset_0x11100 3600
- /* Chakma (11100..1114F) */
+ /* Chakma */
/* 11100 */ _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(C,x),
/* 11108 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -763,15 +705,21 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 11118 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 11120 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(M,T),
/* 11128 */ _(M,T), _(M,T), _(M,B), _(M,B), _(M,L), _(M,T), _(M,TB), _(M,TB),
- /* 11130 */ _(M,T), _(M,B), _(M,B), _(V,I), _(V,T), _(x,x), _(x,x), _(x,x),
- /* 11138 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 11130 */ _(M,T), _(M,B), _(M,B), _(IS,x), _(PK,T), _(x,x), _(Nd,x), _(Nd,x),
+ /* 11138 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 11140 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 11148 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x11180 4240
+ /* Mahajani */
+ /* 11150 */ _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(C,x), _(C,x), _(C,x),
+ /* 11158 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11160 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11168 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11170 */ _(C,x), _(C,x), _(C,x), _(N,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 11178 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Sharada (11180..111DF) */
+ /* Sharada */
/* 11180 */ _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* 11188 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -783,13 +731,116 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 111B8 */ _(M,B), _(M,B), _(M,B), _(M,B), _(M,T), _(M,T), _(M,T), _(M,TR),
/* 111C0 */ _(V,R), _(A,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 111C8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 111D0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 111D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-
-#define indic_offset_0x11680 4336
-
-
- /* Takri (11680..116CF) */
+ /* 111D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 111D8 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+
+ /* Sinhala Archaic Numbers */
+
+ /* 111E0 */ _(x,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 111E8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 111F0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x),
+ /* 111F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+
+ /* Khojki */
+
+ /* 11200 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
+ /* 11208 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11210 */ _(C,x), _(C,x), _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11218 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11220 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11228 */ _(C,x), _(C,x), _(C,x), _(C,x), _(M,R), _(M,R), _(M,R), _(M,B),
+ /* 11230 */ _(M,T), _(M,T), _(M,TR), _(M,TR), _(Bi,x), _(V,R), _(N,x), _(GM,T),
+
+#define indic_offset_0x112b0 3912
+
+
+ /* Khudawadi */
+
+ /* 112B0 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
+ /* 112B8 */ _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 112C0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 112C8 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 112D0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 112D8 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(Bi,x),
+ /* 112E0 */ _(M,R), _(M,L), _(M,R), _(M,B), _(M,B), _(M,T), _(M,T), _(M,T),
+ /* 112E8 */ _(M,T), _(N,x), _(PK,B), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 112F0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 112F8 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+
+ /* Grantha */
+
+ /* 11300 */ _(x,x), _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
+ /* 11308 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(x,x), _(VI,x),
+ /* 11310 */ _(VI,x), _(x,x), _(x,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x),
+ /* 11318 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11320 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11328 */ _(C,x), _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11330 */ _(C,x), _(x,x), _(C,x), _(C,x), _(x,x), _(C,x), _(C,x), _(C,x),
+ /* 11338 */ _(C,x), _(C,x), _(x,x), _(x,x), _(N,x), _(A,x), _(M,R), _(M,R),
+ /* 11340 */ _(M,T), _(M,R), _(M,R), _(M,R), _(M,R), _(x,x), _(x,x), _(M,L),
+ /* 11348 */ _(M,L), _(x,x), _(x,x), _(M,LR), _(M,LR), _(V,R), _(x,x), _(x,x),
+ /* 11350 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(M,R),
+ /* 11358 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 11360 */ _(VI,x), _(VI,x), _(M,R), _(M,R), _(x,x), _(x,x), _(Ca,x), _(Ca,x),
+ /* 11368 */ _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(x,x), _(x,x), _(x,x),
+ /* 11370 */ _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(x,x), _(x,x), _(x,x),
+
+#define indic_offset_0x11480 4112
+
+
+ /* Tirhuta */
+
+ /* 11480 */ _(x,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
+ /* 11488 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(C,x),
+ /* 11490 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11498 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 114A0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 114A8 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 114B0 */ _(M,R), _(M,L), _(M,R), _(M,B), _(M,B), _(M,B), _(M,B), _(M,B),
+ /* 114B8 */ _(M,B), _(M,L), _(M,T), _(M,TL), _(M,LR), _(M,R), _(M,LR), _(Bi,x),
+ /* 114C0 */ _(Bi,x), _(Vs,x), _(V,B), _(N,x), _(A,x), _(x,x), _(x,x), _(x,x),
+ /* 114C8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 114D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 114D8 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+
+#define indic_offset_0x11580 4208
+
+
+ /* Siddham */
+
+ /* 11580 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
+ /* 11588 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x),
+ /* 11590 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11598 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 115A0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 115A8 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(M,R),
+ /* 115B0 */ _(M,L), _(M,R), _(M,B), _(M,B), _(M,B), _(M,B), _(x,x), _(x,x),
+ /* 115B8 */ _(M,L), _(M,TL), _(M,LR),_(M,TLR), _(Bi,x), _(Bi,x), _(Vs,x), _(V,B),
+ /* 115C0 */ _(N,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+
+#define indic_offset_0x11600 4280
+
+
+ /* Modi */
+
+ /* 11600 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
+ /* 11608 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x),
+ /* 11610 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11618 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11620 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11628 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
+ /* 11630 */ _(M,R), _(M,R), _(M,R), _(M,B), _(M,B), _(M,B), _(M,B), _(M,B),
+ /* 11638 */ _(M,B), _(M,T), _(M,T), _(M,R), _(M,R), _(Bi,x), _(Vs,x), _(V,B),
+ /* 11640 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 11648 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 11650 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 11658 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 11660 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 11668 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 11670 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 11678 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+
+ /* Takri */
/* 11680 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* 11688 */ _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -799,30 +850,57 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 116A8 */ _(C,x), _(C,x), _(C,x), _(Bi,x), _(Vs,x), _(M,T), _(M,L), _(M,R),
/* 116B0 */ _(M,B), _(M,B), _(M,T), _(M,T), _(M,T), _(M,T), _(V,T), _(N,x),
/* 116B8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 116C0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 116C8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-
-#define indic_offset_total 4416
+ /* 116C0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
+ /* 116C8 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-}; /* Table occupancy: 60% */
+}; /* Table items: 4488; occupancy: 73% */
INDIC_TABLE_ELEMENT_TYPE
hb_indic_get_categories (hb_codepoint_t u)
{
- if (0x0900 <= u && u <= 0x10A0) return indic_table[u - 0x0900 + indic_offset_0x0900];
- if (0x1700 <= u && u <= 0x1800) return indic_table[u - 0x1700 + indic_offset_0x1700];
- if (0x1900 <= u && u <= 0x1AB0) return indic_table[u - 0x1900 + indic_offset_0x1900];
- if (0x1B00 <= u && u <= 0x1C50) return indic_table[u - 0x1B00 + indic_offset_0x1b00];
- if (0x1CD0 <= u && u <= 0x1D00) return indic_table[u - 0x1CD0 + indic_offset_0x1cd0];
- if (0xA800 <= u && u <= 0xAB00) return indic_table[u - 0xA800 + indic_offset_0xa800];
- if (0xABC0 <= u && u <= 0xAC00) return indic_table[u - 0xABC0 + indic_offset_0xabc0];
- if (0x10A00 <= u && u <= 0x10A60) return indic_table[u - 0x10A00 + indic_offset_0x10a00];
- if (0x11000 <= u && u <= 0x110D0) return indic_table[u - 0x11000 + indic_offset_0x11000];
- if (0x11100 <= u && u <= 0x11150) return indic_table[u - 0x11100 + indic_offset_0x11100];
- if (0x11180 <= u && u <= 0x111E0) return indic_table[u - 0x11180 + indic_offset_0x11180];
- if (0x11680 <= u && u <= 0x116D0) return indic_table[u - 0x11680 + indic_offset_0x11680];
- if (unlikely (u == 0x00A0)) return _(CP,x);
- if (unlikely (u == 0x25CC)) return _(CP,x);
+ switch (u >> 12)
+ {
+ case 0x0:
+ if (0x0028 <= u && u <= 0x0040) return indic_table[u - 0x0028 + indic_offset_0x0028];
+ if (0x00D0 <= u && u <= 0x00D8) return indic_table[u - 0x00D0 + indic_offset_0x00d0];
+ if (0x0900 <= u && u <= 0x0DF8) return indic_table[u - 0x0900 + indic_offset_0x0900];
+ if (unlikely (u == 0x00A0)) return _(CP,x);
+ break;
+
+ case 0x1:
+ if (0x1000 <= u && u <= 0x10A0) return indic_table[u - 0x1000 + indic_offset_0x1000];
+ if (0x1700 <= u && u <= 0x17F0) return indic_table[u - 0x1700 + indic_offset_0x1700];
+ if (0x1900 <= u && u <= 0x1AA0) return indic_table[u - 0x1900 + indic_offset_0x1900];
+ if (0x1B00 <= u && u <= 0x1C50) return indic_table[u - 0x1B00 + indic_offset_0x1b00];
+ if (0x1CD0 <= u && u <= 0x1CF8) return indic_table[u - 0x1CD0 + indic_offset_0x1cd0];
+ break;
+
+ case 0x2:
+ if (0x2008 <= u && u <= 0x2018) return indic_table[u - 0x2008 + indic_offset_0x2008];
+ if (unlikely (u == 0x25CC)) return _(CP,x);
+ break;
+
+ case 0xA:
+ if (0xA800 <= u && u <= 0xAAF8) return indic_table[u - 0xA800 + indic_offset_0xa800];
+ if (0xABC0 <= u && u <= 0xAC00) return indic_table[u - 0xABC0 + indic_offset_0xabc0];
+ break;
+
+ case 0x10:
+ if (0x10A00 <= u && u <= 0x10A48) return indic_table[u - 0x10A00 + indic_offset_0x10a00];
+ break;
+
+ case 0x11:
+ if (0x11000 <= u && u <= 0x110C0) return indic_table[u - 0x11000 + indic_offset_0x11000];
+ if (0x11100 <= u && u <= 0x11238) return indic_table[u - 0x11100 + indic_offset_0x11100];
+ if (0x112B0 <= u && u <= 0x11378) return indic_table[u - 0x112B0 + indic_offset_0x112b0];
+ if (0x11480 <= u && u <= 0x114E0) return indic_table[u - 0x11480 + indic_offset_0x11480];
+ if (0x11580 <= u && u <= 0x115C8) return indic_table[u - 0x11580 + indic_offset_0x11580];
+ if (0x11600 <= u && u <= 0x116D0) return indic_table[u - 0x11600 + indic_offset_0x11600];
+ break;
+
+ default:
+ break;
+ }
return _(x,x);
}
@@ -830,17 +908,27 @@ hb_indic_get_categories (hb_codepoint_t u)
#undef ISC_A
#undef ISC_Bi
+#undef ISC_BJN
+#undef ISC_Ca
#undef ISC_C
#undef ISC_CD
#undef ISC_CF
#undef ISC_CHL
#undef ISC_CM
#undef ISC_CP
-#undef ISC_CR
+#undef ISC_CPR
#undef ISC_CS
+#undef ISC_CSR
+#undef ISC_GM
+#undef ISC_IS
+#undef ISC_ZWJ
#undef ISC_ML
+#undef ISC_ZWNJ
#undef ISC_N
+#undef ISC_Nd
+#undef ISC_NJ
#undef ISC_x
+#undef ISC_PK
#undef ISC_RS
#undef ISC_TL
#undef ISC_TM
@@ -852,7 +940,6 @@ hb_indic_get_categories (hb_codepoint_t u)
#undef IMC_B
#undef IMC_BR
-#undef IMC_I
#undef IMC_L
#undef IMC_LR
#undef IMC_x
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic.cc
index d6520188c58..1100b4aae28 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-indic.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-indic.cc
@@ -195,9 +195,6 @@ set_indic_properties (hb_glyph_info_t &info)
/* The following act more like the Bindus. */
else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x0953, 0x0954)))
cat = OT_SM;
- /* Cantillation marks. */
- else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0xA8E0, 0xA8F1)))
- cat = OT_VD;
/* The following act like consonants. */
else if (unlikely (hb_in_ranges<hb_codepoint_t> (u, 0x0A72, 0x0A73,
0x1CF5, 0x1CF6)))
@@ -211,12 +208,6 @@ set_indic_properties (hb_glyph_info_t &info)
* For now, just treat them like tone marks. */
else if (unlikely (u == 0x1CED))
cat = OT_A;
- /* The following are Visarga variants. */
- else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x1CF2, 0x1CF3)))
- {
- cat = OT_SM;
- ASSERT_STATIC ((int) INDIC_SYLLABIC_CATEGORY_VISARGA == OT_SM);
- }
/* The following take marks in standalone clusters, similar to Avagraha. */
else if (unlikely (hb_in_ranges<hb_codepoint_t> (u, 0xA8F2, 0xA8F7,
0x1CE9, 0x1CEC,
@@ -234,31 +225,12 @@ set_indic_properties (hb_glyph_info_t &info)
}
else if (unlikely (u == 0x17C6)) cat = OT_N; /* Khmer Bindu doesn't like to be repositioned. */
else if (unlikely (u == 0x17D2)) cat = OT_Coeng; /* Khmer coeng */
- else if (unlikely (u == 0x200C)) cat = OT_ZWNJ;
- else if (unlikely (u == 0x200D)) cat = OT_ZWJ;
- else if (unlikely (u == 0x002D || u == 0x00D7 ||
- hb_in_range<hb_codepoint_t> (u, 0x2010, 0x2014)))
+ else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x2010, 0x2011)))
cat = OT_PLACEHOLDER;
else if (unlikely (u == 0x25CC)) cat = OT_DOTTEDCIRCLE;
- else if (unlikely (u == 0x0A71)) cat = OT_SM; /* GURMUKHI ADDAK. Move it to the end. */
else if (unlikely (u == 0xA982)) cat = OT_SM; /* Javanese repha. */
else if (unlikely (u == 0xA9BE)) cat = OT_CM2; /* Javanese medial ya. */
else if (unlikely (u == 0xA9BD)) { cat = OT_M; pos = POS_POST_C; } /* Javanese vocalic r. */
- else if (cat == OT_Repha) {
- /* There are two kinds of characters marked as Repha:
- * - The ones that are GenCat=Mn are already positioned visually, ie. after base. (eg. Khmer)
- * - The ones that are GenCat=Lo is encoded logically, ie. beginning of syllable. (eg. Malayalam)
- *
- * We recategorize the first kind to look like a Nukta and attached to the base directly.
- */
- if (_hb_glyph_info_get_general_category (&info) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
- cat = OT_N;
- }
- /* Decimal and Brahmi numbers. */
- else if (unlikely (_hb_glyph_info_get_general_category (&info) ==
- HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER ||
- hb_in_range<hb_codepoint_t> (u, 0x11052, 0x11065))) cat = OT_PLACEHOLDER;
-
/*
@@ -1336,6 +1308,27 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
hb_glyph_info_t *info = buffer->info;
+
+ /* This function relies heavily on halant glyphs. Lots of ligation
+ * and possibly multiplication substitutions happened prior to this
+ * phase, and that might have messed up our properties. Recover
+ * from a particular case of that where we're fairly sure that a
+ * class of OT_H is desired but has been lost. */
+ if (indic_plan->virama_glyph)
+ {
+ unsigned int virama_glyph = indic_plan->virama_glyph;
+ for (unsigned int i = start; i < end; i++)
+ if (info[i].codepoint == virama_glyph &&
+ _hb_glyph_info_ligated (&info[i]) &&
+ _hb_glyph_info_multiplied (&info[i]))
+ {
+ /* This will make sure that this glyph passes is_halant_or_coeng() test. */
+ info[i].indic_category() = OT_H;
+ _hb_glyph_info_clear_ligated_and_multiplied (&info[i]);
+ }
+ }
+
+
/* 4. Final reordering:
*
* After the localized forms and basic shaping forms GSUB features have been
@@ -1344,20 +1337,43 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
* cluster.
*/
+ bool try_pref = !!indic_plan->mask_array[PREF];
+
/* Find base again */
unsigned int base;
for (base = start; base < end; base++)
- if (info[base].indic_position() >= POS_BASE_C) {
+ if (info[base].indic_position() >= POS_BASE_C)
+ {
+ if (try_pref && base + 1 < end && indic_plan->config->pref_len == 2)
+ {
+ for (unsigned int i = base + 1; i < end; i++)
+ if ((info[i].mask & indic_plan->mask_array[PREF]) != 0)
+ {
+ if (!(_hb_glyph_info_substituted (&info[i]) &&
+ _hb_glyph_info_ligated_and_didnt_multiply (&info[i])))
+ {
+ /* Ok, this was a 'pref' candidate but didn't form any.
+ * Base is around here... */
+ base = i;
+ while (base < end && is_halant_or_coeng (info[base]))
+ base++;
+ info[base].indic_position() = POS_BASE_C;
+
+ try_pref = false;
+ }
+ break;
+ }
+ }
+
if (start < base && info[base].indic_position() > POS_BASE_C)
base--;
break;
}
if (base == end && start < base &&
- info[base - 1].indic_category() != OT_ZWJ)
+ is_one_of (info[base - 1], FLAG (OT_ZWJ)))
base--;
while (start < base &&
- (info[base].indic_category() == OT_H ||
- info[base].indic_category() == OT_N))
+ is_one_of (info[base], (FLAG (OT_N) | HALANT_OR_COENG_FLAGS)))
base--;
@@ -1383,7 +1399,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
if (buffer->props.script != HB_SCRIPT_MALAYALAM && buffer->props.script != HB_SCRIPT_TAMIL)
{
while (new_pos > start &&
- !(is_one_of (info[new_pos], (FLAG (OT_M) | FLAG (OT_H) | FLAG (OT_Coeng)))))
+ !(is_one_of (info[new_pos], (FLAG (OT_M) | HALANT_OR_COENG_FLAGS))))
new_pos--;
/* If we found no Halant we are done.
@@ -1446,7 +1462,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
if (start + 1 < end &&
info[start].indic_position() == POS_RA_TO_BECOME_REPH &&
((info[start].indic_category() == OT_Repha) ^
- _hb_glyph_info_ligated (&info[start])))
+ _hb_glyph_info_ligated_and_didnt_multiply (&info[start])))
{
unsigned int new_reph_pos;
reph_position_t reph_pos = indic_plan->config->reph_pos;
@@ -1583,7 +1599,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
* the following rules:
*/
- if (indic_plan->mask_array[PREF] && base + 1 < end) /* Otherwise there can't be any pre-base reordering Ra. */
+ if (try_pref && base + 1 < end) /* Otherwise there can't be any pre-base reordering Ra. */
{
unsigned int pref_len = indic_plan->config->pref_len;
for (unsigned int i = base + 1; i < end; i++)
@@ -1599,7 +1615,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
* If pref len is longer than one, then only reorder if it ligated. If
* pref len is one, only reorder if it didn't ligate with other things. */
if (_hb_glyph_info_substituted (&info[i]) &&
- ((pref_len == 1) ^ _hb_glyph_info_ligated (&info[i])))
+ ((pref_len == 1) ^ _hb_glyph_info_ligated_and_didnt_multiply (&info[i])))
{
/*
* 2. Try to find a target position the same way as for pre-base matra.
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-myanmar-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-myanmar-machine.hh
index bb80d7a705d..bb80d7a705d 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-myanmar-machine.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-myanmar-machine.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-myanmar-machine.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-myanmar-machine.rl
index 9649a916f02..9649a916f02 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-myanmar-machine.rl
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-myanmar-machine.rl
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-myanmar.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-myanmar.cc
index 149a0250dbd..ae5446a6404 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-myanmar.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-myanmar.cc
@@ -177,8 +177,6 @@ set_myanmar_properties (hb_glyph_info_t &info)
*/
if (unlikely (hb_in_range<hb_codepoint_t> (u, 0xFE00, 0xFE0F)))
cat = (indic_category_t) OT_VS;
- else if (unlikely (u == 0x200C)) cat = (indic_category_t) OT_ZWNJ;
- else if (unlikely (u == 0x200D)) cat = (indic_category_t) OT_ZWJ;
switch (u)
{
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-private.hh
index 104726e8af5..3e581afa9cc 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-private.hh
@@ -173,6 +173,10 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
/* Unicode-6.0 additions */
case HB_SCRIPT_MANDAIC:
+ /* Unicode-7.0 additions */
+ case HB_SCRIPT_MANICHAEAN:
+ case HB_SCRIPT_PSALTER_PAHLAVI:
+
/* For Arabic script, use the Arabic shaper even if no OT script tag was found.
* This is because we do fallback shaping for Arabic script (and not others). */
if (planner->map.chosen_script[0] != HB_OT_TAG_DEFAULT_SCRIPT ||
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-sea-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-sea-machine.hh
index 86b7ae7d5ca..86b7ae7d5ca 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-sea-machine.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-sea-machine.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-sea-machine.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-sea-machine.rl
index 46140fc4d5f..46140fc4d5f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-sea-machine.rl
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-sea-machine.rl
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-sea.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-sea.cc
index 6288a90c9a9..6288a90c9a9 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-sea.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-sea.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-thai.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-thai.cc
index 8664eca45cd..cb9a7d93b2a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-thai.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-thai.cc
@@ -330,8 +330,11 @@ preprocess_text_thai (const hb_ot_shape_plan_t *plan,
if (unlikely (buffer->in_error))
return;
- /* Ok, let's see... */
+ /* Make Nikhahit be recognized as a mark when zeroing widths. */
unsigned int end = buffer->out_len;
+ _hb_glyph_info_set_general_category (&buffer->out_info[end - 2], HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK);
+
+ /* Ok, let's see... */
unsigned int start = end - 2;
while (start > 0 && IS_TONE_MARK (buffer->out_info[start - 1].codepoint))
start--;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-tibetan.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-tibetan.cc
index 01465a426f8..01465a426f8 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-complex-tibetan.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-complex-tibetan.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-fallback-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-fallback-private.hh
index ec653513f1b..ec653513f1b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-fallback-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-fallback-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-fallback.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-fallback.cc
index 5d526c3a8e8..5d526c3a8e8 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-fallback.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-fallback.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-normalize-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-normalize-private.hh
index c744e26451d..c744e26451d 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-normalize-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-normalize-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-normalize.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-normalize.cc
index 2a6a4390030..2a6a4390030 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-normalize.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-normalize.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-private.hh
index 54ac2c3cf7c..54ac2c3cf7c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape.cc
index 3080a1d03db..42f68ab2907 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape.cc
@@ -452,26 +452,42 @@ hb_ot_substitute (hb_ot_shape_context_t *c)
/* Position */
static inline void
-zero_mark_widths_by_unicode (hb_buffer_t *buffer)
+adjust_mark_offsets (hb_glyph_position_t *pos)
+{
+ pos->x_offset -= pos->x_advance;
+ pos->y_offset -= pos->y_advance;
+}
+
+static inline void
+zero_mark_width (hb_glyph_position_t *pos)
+{
+ pos->x_advance = 0;
+ pos->y_advance = 0;
+}
+
+static inline void
+zero_mark_widths_by_unicode (hb_buffer_t *buffer, bool adjust_offsets)
{
unsigned int count = buffer->len;
for (unsigned int i = 0; i < count; i++)
if (_hb_glyph_info_get_general_category (&buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
{
- buffer->pos[i].x_advance = 0;
- buffer->pos[i].y_advance = 0;
+ if (adjust_offsets)
+ adjust_mark_offsets (&buffer->pos[i]);
+ zero_mark_width (&buffer->pos[i]);
}
}
static inline void
-zero_mark_widths_by_gdef (hb_buffer_t *buffer)
+zero_mark_widths_by_gdef (hb_buffer_t *buffer, bool adjust_offsets)
{
unsigned int count = buffer->len;
for (unsigned int i = 0; i < count; i++)
if (_hb_glyph_info_is_mark (&buffer->info[i]))
{
- buffer->pos[i].x_advance = 0;
- buffer->pos[i].y_advance = 0;
+ if (adjust_offsets)
+ adjust_mark_offsets (&buffer->pos[i]);
+ zero_mark_width (&buffer->pos[i]);
}
}
@@ -501,16 +517,28 @@ hb_ot_position_complex (hb_ot_shape_context_t *c)
{
bool ret = false;
unsigned int count = c->buffer->len;
+ bool has_positioning = hb_ot_layout_has_positioning (c->face);
+ /* If the font has no GPOS, AND, no fallback positioning will
+ * happen, AND, direction is forward, then when zeroing mark
+ * widths, we shift the mark with it, such that the mark
+ * is positioned hanging over the previous glyph. When
+ * direction is backward we don't shift and it will end up
+ * hanging over the next glyph after the final reordering.
+ * If fallback positinoing happens or GPOS is present, we don't
+ * care.
+ */
+ bool adjust_offsets_when_zeroing = !(has_positioning || c->plan->shaper->fallback_position ||
+ HB_DIRECTION_IS_BACKWARD (c->buffer->props.direction));
switch (c->plan->shaper->zero_width_marks)
{
case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY:
- zero_mark_widths_by_gdef (c->buffer);
+ zero_mark_widths_by_gdef (c->buffer, adjust_offsets_when_zeroing);
break;
/* Not currently used for any shaper:
case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_EARLY:
- zero_mark_widths_by_unicode (c->buffer);
+ zero_mark_widths_by_unicode (c->buffer, adjust_offsets_when_zeroing);
break;
*/
@@ -521,7 +549,7 @@ hb_ot_position_complex (hb_ot_shape_context_t *c)
break;
}
- if (hb_ot_layout_has_positioning (c->face))
+ if (has_positioning)
{
hb_glyph_info_t *info = c->buffer->info;
hb_glyph_position_t *pos = c->buffer->pos;
@@ -550,11 +578,11 @@ hb_ot_position_complex (hb_ot_shape_context_t *c)
switch (c->plan->shaper->zero_width_marks)
{
case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE:
- zero_mark_widths_by_unicode (c->buffer);
+ zero_mark_widths_by_unicode (c->buffer, adjust_offsets_when_zeroing);
break;
case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE:
- zero_mark_widths_by_gdef (c->buffer);
+ zero_mark_widths_by_gdef (c->buffer, adjust_offsets_when_zeroing);
break;
default:
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape.h
index afe6fe9618c..1402f54acc5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-shape.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-shape.h
@@ -24,31 +24,30 @@
* Red Hat Author(s): Behdad Esfahbod
*/
+#ifndef HB_OT_H_IN
+#error "Include <hb-ot.h> instead."
+#endif
+
#ifndef HB_OT_SHAPE_H
#define HB_OT_SHAPE_H
-#define HB_OT_SHAPE_H_IN
#include "hb.h"
-#include "hb-ot-layout.h"
-#include "hb-ot-tag.h"
-
HB_BEGIN_DECLS
/* TODO port to shape-plan / set. */
void
hb_ot_shape_glyphs_closure (hb_font_t *font,
- hb_buffer_t *buffer,
- const hb_feature_t *features,
- unsigned int num_features,
- hb_set_t *glyphs);
+ hb_buffer_t *buffer,
+ const hb_feature_t *features,
+ unsigned int num_features,
+ hb_set_t *glyphs);
void
hb_ot_shape_plan_collect_lookups (hb_shape_plan_t *shape_plan,
- hb_tag_t table_tag,
- hb_set_t *lookup_indexes /* OUT */);
+ hb_tag_t table_tag,
+ hb_set_t *lookup_indexes /* OUT */);
HB_END_DECLS
-#undef HB_OT_SHAPE_H_IN
#endif /* HB_OT_SHAPE_H */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-tag.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-tag.cc
index 5594ef5074a..5594ef5074a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-tag.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-tag.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-tag.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-tag.h
index 1bf12ab3c09..1bf12ab3c09 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-tag.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot-tag.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot.h
index 47c92a58e4b..47c92a58e4b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ot.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-private.hh
index e08c1fe98e5..ccebd1cac2e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-private.hh
@@ -54,23 +54,77 @@
#include <stdarg.h>
+/* Compiler attributes */
-/* Essentials */
-#ifndef NULL
-# define NULL ((void *) 0)
+#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
+#define _HB_BOOLEAN_EXPR(expr) ((expr) ? 1 : 0)
+#define likely(expr) (__builtin_expect (_HB_BOOLEAN_EXPR(expr), 1))
+#define unlikely(expr) (__builtin_expect (_HB_BOOLEAN_EXPR(expr), 0))
+#else
+#define likely(expr) (expr)
+#define unlikely(expr) (expr)
#endif
+#ifndef __GNUC__
+#undef __attribute__
+#define __attribute__(x)
+#endif
+
+#if __GNUC__ >= 3
+#define HB_PURE_FUNC __attribute__((pure))
+#define HB_CONST_FUNC __attribute__((const))
+#define HB_PRINTF_FUNC(format_idx, arg_idx) __attribute__((__format__ (__printf__, format_idx, arg_idx)))
+#else
+#define HB_PURE_FUNC
+#define HB_CONST_FUNC
+#define HB_PRINTF_FUNC(format_idx, arg_idx)
+#endif
+#if __GNUC__ >= 4
+#define HB_UNUSED __attribute__((unused))
+#else
+#define HB_UNUSED
+#endif
+
+#ifndef HB_INTERNAL
+# if !defined(__MINGW32__) && !defined(__CYGWIN__)
+# define HB_INTERNAL __attribute__((__visibility__("hidden")))
+# else
+# define HB_INTERNAL
+# endif
+#endif
+
+#if (defined(__WIN32__) && !defined(__WINE__)) || defined(_MSC_VER)
+#define snprintf _snprintf
+#endif
+
+#ifdef _MSC_VER
+#undef inline
+#define inline __inline
+#endif
+
+#ifdef __STRICT_ANSI__
+#undef inline
+#define inline __inline__
+#endif
+
+#if __GNUC__ >= 3
+#define HB_FUNC __PRETTY_FUNCTION__
+#elif defined(_MSC_VER)
+#define HB_FUNC __FUNCSIG__
+#else
+#define HB_FUNC __func__
+#endif
-/* Void! */
-struct _hb_void_t {};
-typedef const _hb_void_t &hb_void_t;
-#define HB_VOID (* (const _hb_void_t *) NULL)
/* Basics */
+#ifndef NULL
+# define NULL ((void *) 0)
+#endif
+
#undef MIN
template <typename Type>
static inline Type MIN (const Type &a, const Type &b) { return a < b ? a : b; }
@@ -92,7 +146,7 @@ static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
#define HB_STMT_START do
#define HB_STMT_END while (0)
-#define _ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1]
+#define _ASSERT_STATIC1(_line, _cond) HB_UNUSED typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1]
#define _ASSERT_STATIC0(_line, _cond) _ASSERT_STATIC1 (_line, (_cond))
#define ASSERT_STATIC(_cond) _ASSERT_STATIC0 (__LINE__, (_cond))
@@ -139,7 +193,7 @@ ASSERT_STATIC (sizeof (hb_var_int_t) == 4);
/* Check _assertion in a method environment */
#define _ASSERT_POD1(_line) \
- inline void _static_assertion_on_line_##_line (void) const \
+ HB_UNUSED inline void _static_assertion_on_line_##_line (void) const \
{ _ASSERT_INSTANCE_POD1 (_line, *this); /* Make sure it's POD. */ }
# define _ASSERT_POD0(_line) _ASSERT_POD1 (_line)
# define ASSERT_POD() _ASSERT_POD0 (__LINE__)
@@ -148,68 +202,10 @@ ASSERT_STATIC (sizeof (hb_var_int_t) == 4);
/* Misc */
-
-#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
-#define _HB_BOOLEAN_EXPR(expr) ((expr) ? 1 : 0)
-#define likely(expr) (__builtin_expect (_HB_BOOLEAN_EXPR(expr), 1))
-#define unlikely(expr) (__builtin_expect (_HB_BOOLEAN_EXPR(expr), 0))
-#else
-#define likely(expr) (expr)
-#define unlikely(expr) (expr)
-#endif
-
-#ifndef __GNUC__
-#undef __attribute__
-#define __attribute__(x)
-#endif
-
-#if __GNUC__ >= 3
-#define HB_PURE_FUNC __attribute__((pure))
-#define HB_CONST_FUNC __attribute__((const))
-#define HB_PRINTF_FUNC(format_idx, arg_idx) __attribute__((__format__ (__printf__, format_idx, arg_idx)))
-#else
-#define HB_PURE_FUNC
-#define HB_CONST_FUNC
-#define HB_PRINTF_FUNC(format_idx, arg_idx)
-#endif
-#if __GNUC__ >= 4
-#define HB_UNUSED __attribute__((unused))
-#else
-#define HB_UNUSED
-#endif
-
-#ifndef HB_INTERNAL
-# if !defined(__MINGW32__) && !defined(__CYGWIN__)
-# define HB_INTERNAL __attribute__((__visibility__("hidden")))
-# else
-# define HB_INTERNAL
-# endif
-#endif
-
-
-#if (defined(__WIN32__) && !defined(__WINE__)) || defined(_MSC_VER)
-#define snprintf _snprintf
-#endif
-
-#ifdef _MSC_VER
-#undef inline
-#define inline __inline
-#endif
-
-#ifdef __STRICT_ANSI__
-#undef inline
-#define inline __inline__
-#endif
-
-
-#if __GNUC__ >= 3
-#define HB_FUNC __PRETTY_FUNCTION__
-#elif defined(_MSC_VER)
-#define HB_FUNC __FUNCSIG__
-#else
-#define HB_FUNC __func__
-#endif
-
+/* Void! */
+struct _hb_void_t {};
+typedef const _hb_void_t &hb_void_t;
+#define HB_VOID (* (const _hb_void_t *) NULL)
/* Return the number of 1 bits in mask. */
static inline HB_CONST_FUNC unsigned int
@@ -276,7 +272,7 @@ typedef int (*hb_compare_func_t) (const void *, const void *);
#define HB_PREALLOCED_ARRAY_INIT {0}
-template <typename Type, unsigned int StaticSize>
+template <typename Type, unsigned int StaticSize=16>
struct hb_prealloced_array_t
{
unsigned int len;
@@ -357,14 +353,14 @@ struct hb_prealloced_array_t
return NULL;
}
- inline void sort (void)
+ inline void qsort (void)
{
- qsort (array, len, sizeof (Type), (hb_compare_func_t) Type::cmp);
+ ::qsort (array, len, sizeof (Type), (hb_compare_func_t) Type::cmp);
}
- inline void sort (unsigned int start, unsigned int end)
+ inline void qsort (unsigned int start, unsigned int end)
{
- qsort (array + start, end - start, sizeof (Type), (hb_compare_func_t) Type::cmp);
+ ::qsort (array + start, end - start, sizeof (Type), (hb_compare_func_t) Type::cmp);
}
template <typename T>
@@ -387,12 +383,11 @@ struct hb_prealloced_array_t
}
};
-#define HB_AUTO_ARRAY_PREALLOCED 16
template <typename Type>
-struct hb_auto_array_t : hb_prealloced_array_t <Type, HB_AUTO_ARRAY_PREALLOCED>
+struct hb_auto_array_t : hb_prealloced_array_t <Type>
{
- 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 (); }
+ hb_auto_array_t (void) { hb_prealloced_array_t<Type>::init (); }
+ ~hb_auto_array_t (void) { hb_prealloced_array_t<Type>::finish (); }
};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-set-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-set-private.hh
index 705f554ce69..705f554ce69 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-set-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-set-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-set.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-set.cc
index 59a0af46ed4..59a0af46ed4 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-set.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-set.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-set.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-set.h
index bafdae96333..bafdae96333 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-set.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-set.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape-plan-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape-plan-private.hh
index 607da5e7791..607da5e7791 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape-plan-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape-plan-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape-plan.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape-plan.cc
index e354f291763..5ffc6b1362e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape-plan.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape-plan.cc
@@ -104,8 +104,6 @@ hb_shape_plan_create (hb_face_t *face,
unsigned int num_user_features,
const char * const *shaper_list)
{
- assert (props->direction != HB_DIRECTION_INVALID);
-
hb_shape_plan_t *shape_plan;
hb_feature_t *features = NULL;
@@ -120,6 +118,8 @@ hb_shape_plan_create (hb_face_t *face,
return hb_shape_plan_get_empty ();
}
+ assert (props->direction != HB_DIRECTION_INVALID);
+
hb_face_make_immutable (face);
shape_plan->default_shaper_list = shaper_list == NULL;
shape_plan->face_unsafe = face;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape-plan.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape-plan.h
index 8f54552f90b..8f54552f90b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape-plan.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape-plan.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape.cc
index c1b752405e1..c1b752405e1 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape.h
index 10a35cb517e..10a35cb517e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shape.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shape.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shaper-impl-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shaper-impl-private.hh
index 7844081e95b..7844081e95b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shaper-impl-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shaper-impl-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shaper-list.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shaper-list.hh
index 6c537d49215..6c537d49215 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shaper-list.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shaper-list.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shaper-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shaper-private.hh
index 29c4493943d..29c4493943d 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shaper-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shaper-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shaper.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shaper.cc
index 44f718aa702..44f718aa702 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-shaper.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-shaper.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ucdn.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ucdn.cc
index 7d24559de67..5b53821f923 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ucdn.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-ucdn.cc
@@ -125,6 +125,29 @@ static const hb_script_t ucdn_script_translate[] =
HB_SCRIPT_SORA_SOMPENG,
HB_SCRIPT_TAKRI,
HB_SCRIPT_UNKNOWN,
+ HB_SCRIPT_BASSA_VAH,
+ HB_SCRIPT_CAUCASIAN_ALBANIAN,
+ HB_SCRIPT_DUPLOYAN,
+ HB_SCRIPT_ELBASAN,
+ HB_SCRIPT_GRANTHA,
+ HB_SCRIPT_KHOJKI,
+ HB_SCRIPT_KHUDAWADI,
+ HB_SCRIPT_LINEAR_A,
+ HB_SCRIPT_MAHAJANI,
+ HB_SCRIPT_MANICHAEAN,
+ HB_SCRIPT_MENDE_KIKAKUI,
+ HB_SCRIPT_MODI,
+ HB_SCRIPT_MRO,
+ HB_SCRIPT_NABATAEAN,
+ HB_SCRIPT_OLD_NORTH_ARABIAN,
+ HB_SCRIPT_OLD_PERMIC,
+ HB_SCRIPT_PAHAWH_HMONG,
+ HB_SCRIPT_PALMYRENE,
+ HB_SCRIPT_PAU_CIN_HAU,
+ HB_SCRIPT_PSALTER_PAHLAVI,
+ HB_SCRIPT_SIDDHAM,
+ HB_SCRIPT_TIRHUTA,
+ HB_SCRIPT_WARANG_CITI,
};
static hb_unicode_combining_class_t
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-unicode-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-unicode-private.hh
index 991130fa14e..583a19702cc 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-unicode-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-unicode-private.hh
@@ -130,46 +130,39 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
/* Default_Ignorable codepoints:
*
- * Note that as of Oct 2012 (Unicode 6.2), U+180E MONGOLIAN VOWEL SEPARATOR
- * is NOT Default_Ignorable, but it really behaves in a way that it should
- * be. That has been reported to the Unicode Technical Committee for
- * consideration. As such, we include it here, since Uniscribe removes it.
- * It *is* in Unicode 6.3 however. U+061C ARABIC LETTER MARK from Unicode
- * 6.3 is also added manually. The new Unicode 6.3 bidi formatting
- * characters are encoded in a block that was Default_Ignorable already.
- *
* Note: While U+115F, U+1160, U+3164 and U+FFA0 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 four.
*
- * Gathered from:
- * http://unicode.org/cldr/utility/list-unicodeset.jsp?a=[:DI:]&abb=on&ucd=on&esc=on
- *
- * Last updated to the page with the following versions:
- * Version 3.6; ICU version: 50.0.1.0; Unicode version: 6.1.0.0
- *
- * 4,167 Code Points
- *
- * [\u00AD\u034F\u115F\u1160\u17B4\u17B5\u180B-\u180D\u200B-\u200F\u202A-\u202E\u2060-\u206F\u3164\uFE00-\uFE0F\uFEFF\uFFA0\uFFF0-\uFFF8\U0001D173-\U0001D17A\U000E0000-\U000E0FFF]
- *
- * 00AD ;SOFT HYPHEN
- * 034F ;COMBINING GRAPHEME JOINER
- * #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
- * 200B..200F ;RIGHT-TO-LEFT MARK
- * 202A..202E ;RIGHT-TO-LEFT OVERRIDE
- * 2060..206F ;NOMINAL DIGIT SHAPES
- * #3164 ;HANGUL FILLER
- * FE00..FE0F ;VARIATION SELECTOR-16
- * FEFF ;ZERO WIDTH NO-BREAK SPACE
- * #FFA0 ;HALFWIDTH HANGUL FILLER
- * FFF0..FFF8 ;<unassigned-FFF8>
- * 1D173..1D17A ;MUSICAL SYMBOL END PHRASE
- * E0000..E0FFF ;<unassigned-E0FFF>
+ * Unicode 7.0:
+ * $ grep '; Default_Ignorable_Code_Point ' DerivedCoreProperties.txt | sed 's/;.*#/#/'
+ * 00AD # Cf SOFT HYPHEN
+ * 034F # Mn COMBINING GRAPHEME JOINER
+ * 061C # Cf ARABIC LETTER MARK
+ * 115F..1160 # Lo [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER
+ * 17B4..17B5 # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+ * 180B..180D # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+ * 180E # Cf MONGOLIAN VOWEL SEPARATOR
+ * 200B..200F # Cf [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
+ * 202A..202E # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+ * 2060..2064 # Cf [5] WORD JOINER..INVISIBLE PLUS
+ * 2065 # Cn <reserved-2065>
+ * 2066..206F # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
+ * 3164 # Lo HANGUL FILLER
+ * FE00..FE0F # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+ * FEFF # Cf ZERO WIDTH NO-BREAK SPACE
+ * FFA0 # Lo HALFWIDTH HANGUL FILLER
+ * FFF0..FFF8 # Cn [9] <reserved-FFF0>..<reserved-FFF8>
+ * 1BCA0..1BCA3 # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+ * 1D173..1D17A # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+ * E0000 # Cn <reserved-E0000>
+ * E0001 # Cf LANGUAGE TAG
+ * E0002..E001F # Cn [30] <reserved-E0002>..<reserved-E001F>
+ * E0020..E007F # Cf [96] TAG SPACE..CANCEL TAG
+ * E0080..E00FF # Cn [128] <reserved-E0080>..<reserved-E00FF>
+ * E0100..E01EF # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+ * E01F0..E0FFF # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
*/
inline hb_bool_t
is_default_ignorable (hb_codepoint_t ch)
@@ -197,7 +190,8 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
{
/* Other planes */
switch (plane) {
- case 0x01: return hb_in_range<hb_codepoint_t> (ch, 0x0001D173, 0x0001D17A);
+ case 0x01: return hb_in_ranges<hb_codepoint_t> (ch, 0x0001BCA0, 0x0001BCA3,
+ 0x0001D173, 0x0001D17A);
case 0x0E: return hb_in_range<hb_codepoint_t> (ch, 0x000E0000, 0x000E0FFF);
default: return false;
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-unicode.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-unicode.cc
index 84e5c06fd35..84e5c06fd35 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-unicode.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-unicode.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-unicode.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-unicode.h
index 1c4e097b92d..1c4e097b92d 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-unicode.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-unicode.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-uniscribe.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-uniscribe.cc
index 6571448872a..f6994159f62 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-uniscribe.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-uniscribe.cc
@@ -631,7 +631,7 @@ _hb_uniscribe_shape (hb_shape_plan_t *shape_plan,
event->start = false;
event->feature = feature;
}
- feature_events.sort ();
+ feature_events.qsort ();
/* Add a strategic final event. */
{
active_feature_t feature;
@@ -663,7 +663,7 @@ _hb_uniscribe_shape (hb_shape_plan_t *shape_plan,
unsigned int offset = feature_records.len;
- active_features.sort ();
+ active_features.qsort ();
for (unsigned int j = 0; j < active_features.len; j++)
{
if (!j || active_features[j].rec.tagFeature != feature_records[feature_records.len - 1].tagFeature)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-uniscribe.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-uniscribe.h
index 51887c8794b..51887c8794b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-uniscribe.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-uniscribe.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-utf-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-utf-private.hh
index b9a6519d28e..b9a6519d28e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-utf-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-utf-private.hh
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-version.h.in b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-version.h.in
index 43634f91ce8..2517160d18b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-version.h.in
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-version.h.in
@@ -42,8 +42,8 @@ HB_BEGIN_DECLS
#define HB_VERSION_STRING "@HB_VERSION@"
-#define HB_VERSION_CHECK(major,minor,micro) \
- ((major)*10000+(minor)*100+(micro) >= \
+#define HB_VERSION_ATLEAST(major,minor,micro) \
+ ((major)*10000+(minor)*100+(micro) <= \
HB_VERSION_MAJOR*10000+HB_VERSION_MINOR*100+HB_VERSION_MICRO)
@@ -56,9 +56,9 @@ const char *
hb_version_string (void);
hb_bool_t
-hb_version_check (unsigned int major,
- unsigned int minor,
- unsigned int micro);
+hb_version_atleast (unsigned int major,
+ unsigned int minor,
+ unsigned int micro);
HB_END_DECLS
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-warning.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-warning.cc
index e0f88e2d4ad..e0f88e2d4ad 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-warning.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb-warning.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb.h
index c5a938a3818..c5a938a3818 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/hb.h
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/main.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/main.cc
index 6ba636e1a61..f9708cc948e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/main.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/main.cc
@@ -151,8 +151,8 @@ main (int argc, char **argv)
for (int n_feature = 0; n_feature < num_features; n_feature++) {
const Feature &feature = g.get_feature (n_feature);
int num_lookups = feature.get_lookup_count ();
- printf (" Feature %2d of %2d: %.4s\n", n_feature, num_features,
- (const char *)g.get_feature_tag(n_feature));
+ printf (" Feature %2d of %2d: %c%c%c%c\n", n_feature, num_features,
+ HB_UNTAG(g.get_feature_tag(n_feature)));
printf (" %d lookup(s) found in feature\n", num_lookups);
for (int n_lookup = 0; n_lookup < num_lookups; n_lookup++) {
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/test-buffer-serialize.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/test-buffer-serialize.cc
index 18c46e9524b..18c46e9524b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/test-buffer-serialize.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/test-buffer-serialize.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/test-size-params.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/test-size-params.cc
index 35d9e3c8e25..35d9e3c8e25 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/test-size-params.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/test-size-params.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/test-would-substitute.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/test-would-substitute.cc
index 8ea87cdf397..8ea87cdf397 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/test-would-substitute.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/test-would-substitute.cc
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/test.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/test.cc
index a8fe046f34c..a8fe046f34c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/test.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.30/src/test.cc
diff --git a/Build/source/libs/harfbuzz/include/Makefile.in b/Build/source/libs/harfbuzz/include/Makefile.in
index 37e6c3fd131..1b9e1edca05 100644
--- a/Build/source/libs/harfbuzz/include/Makefile.in
+++ b/Build/source/libs/harfbuzz/include/Makefile.in
@@ -118,6 +118,7 @@ am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
+AM_CXXFLAGS = @AM_CXXFLAGS@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
diff --git a/Build/source/libs/harfbuzz/version.ac b/Build/source/libs/harfbuzz/version.ac
index 1e2ff2eac6e..0d22b514761 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.29])
+m4_define([harfbuzz_version], [0.9.30])