diff options
author | Peter Breitenlohner <peb@mppmu.mpg.de> | 2013-10-29 08:21:47 +0000 |
---|---|---|
committer | Peter Breitenlohner <peb@mppmu.mpg.de> | 2013-10-29 08:21:47 +0000 |
commit | 0043db89f7e867929263352f833492ef6df2286a (patch) | |
tree | 19631d6936ba1cbfdcc683c832ba50efd4ecd7d1 /Build/source/libs/harfbuzz | |
parent | dd4589b2bab77695ef1be9924a84b03e47092a27 (diff) |
harfbuzz 0.9.23
git-svn-id: svn://tug.org/texlive/trunk@32029 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/harfbuzz')
-rw-r--r-- | Build/source/libs/harfbuzz/ChangeLog | 5 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/Makefile.in | 4 | ||||
-rwxr-xr-x | Build/source/libs/harfbuzz/configure | 32 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic-machine.hh | 1443 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23-PATCHES/ChangeLog (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22-PATCHES/ChangeLog) | 5 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23-PATCHES/TL-Changes (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22-PATCHES/TL-Changes) | 4 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/AUTHORS (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/AUTHORS) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/Android.mk (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/Android.mk) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/ChangeLog (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/ChangeLog) | 1079 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/Makefile.am (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/Makefile.am) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/NEWS (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/NEWS) | 10 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/README (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/README) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/THANKS (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/THANKS) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/TODO (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/TODO) | 0 | ||||
-rwxr-xr-x | Build/source/libs/harfbuzz/harfbuzz-0.9.23/autogen.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/autogen.sh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/config.h.in (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/config.h.in) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/configure.ac (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/configure.ac) | 4 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/gtk-doc.make (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/gtk-doc.make) | 70 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/harfbuzz.doap (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/harfbuzz.doap) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/Makefile.am (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/Makefile.am) | 0 | ||||
-rwxr-xr-x | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-c-linkage-decls.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-c-linkage-decls.sh) | 0 | ||||
-rwxr-xr-x | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-defs.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-defs.sh) | 0 | ||||
-rwxr-xr-x | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-header-guards.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-header-guards.sh) | 0 | ||||
-rwxr-xr-x | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-includes.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-includes.sh) | 0 | ||||
-rwxr-xr-x | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-libstdc++.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-libstdc++.sh) | 0 | ||||
-rwxr-xr-x | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-static-inits.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-static-inits.sh) | 0 | ||||
-rwxr-xr-x | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-symbols.sh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-symbols.sh) | 0 | ||||
-rwxr-xr-x | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/gen-arabic-table.py (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/gen-arabic-table.py) | 0 | ||||
-rwxr-xr-x | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/gen-indic-table.py (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/gen-indic-table.py) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/harfbuzz-gobject.pc.in (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/harfbuzz-gobject.pc.in) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/harfbuzz-icu.pc.in (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/harfbuzz-icu.pc.in) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/harfbuzz.pc.in (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/harfbuzz.pc.in) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-atomic-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-atomic-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-blob.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-blob.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-blob.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-blob.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-deserialize-json.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-deserialize-json.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-deserialize-json.rl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-deserialize-json.rl) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-deserialize-text.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-deserialize-text.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-deserialize-text.rl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-deserialize-text.rl) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-private.hh) | 4 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-serialize.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-serialize.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer.cc) | 51 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer.h) | 16 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-cache-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-cache-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-common.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-common.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-common.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-common.h) | 2 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-coretext.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-coretext.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-coretext.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-coretext.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-deprecated.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-deprecated.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-face-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-face-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-face.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-face.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-face.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-face.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-fallback-shape.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-fallback-shape.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-font-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-font-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-font.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-font.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-font.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-font.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ft.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ft.cc) | 8 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ft.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ft.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-glib.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-glib.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-glib.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-glib.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject-enums.cc.tmpl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject-enums.cc.tmpl) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject-enums.h.tmpl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject-enums.h.tmpl) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject-structs.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject-structs.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject-structs.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject-structs.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-graphite2.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-graphite2.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-graphite2.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-graphite2.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-icu.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-icu.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-icu.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-icu.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-mutex-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-mutex-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-object-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-object-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-open-file-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-open-file-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-open-type-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-open-type-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-head-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-head-table.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-hhea-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-hhea-table.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-hmtx-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-hmtx-table.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-common-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-common-private.hh) | 1 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-gdef-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-gdef-table.hh) | 8 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-gpos-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-gpos-table.hh) | 128 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-gsub-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-gsub-table.hh) | 37 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-gsubgpos-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-gsubgpos-private.hh) | 280 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-jstf-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-jstf-table.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-private.hh) | 401 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout.cc) | 40 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-map-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-map-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-map.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-map.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-maxp-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-maxp-table.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-name-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-name-table.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-arabic-fallback.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-arabic-fallback.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-arabic-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-arabic-table.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-arabic.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-arabic.cc) | 21 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-default.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-default.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic-machine.hh | 1824 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic-machine.rl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic-machine.rl) | 21 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic-private.hh) | 40 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic-table.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic-table.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic.cc) | 358 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-myanmar-machine.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-myanmar-machine.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-myanmar-machine.rl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-myanmar-machine.rl) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-myanmar.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-myanmar.cc) | 12 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-private.hh) | 4 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-sea-machine.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-sea-machine.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-sea-machine.rl (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-sea-machine.rl) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-sea.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-sea.cc) | 2 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-thai.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-thai.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-fallback-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-fallback-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-fallback.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-fallback.cc) | 73 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-normalize-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-normalize-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-normalize.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-normalize.cc) | 29 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape.cc) | 96 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-tag.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-tag.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-tag.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-tag.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-set-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-set-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-set.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-set.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-set.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-set.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape-plan-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape-plan-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape-plan.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape-plan.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape-plan.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape-plan.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shaper-impl-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shaper-impl-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shaper-list.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shaper-list.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shaper-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shaper-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shaper.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shaper.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-tt-font.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-tt-font.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ucdn.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ucdn.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-unicode-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-unicode-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-unicode.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-unicode.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-unicode.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-unicode.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-uniscribe.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-uniscribe.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-uniscribe.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-uniscribe.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-utf-private.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-utf-private.hh) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-version.h.in (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-version.h.in) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-warning.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-warning.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb.h (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb.h) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/main.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/main.cc) | 0 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/test-buffer-serialize.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/test-buffer-serialize.cc) | 5 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/test-size-params.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/test-size-params.cc) | 5 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/test-would-substitute.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/test-would-substitute.cc) | 5 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/test.cc (renamed from Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/test.cc) | 5 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/hbtest.c | 10 | ||||
-rw-r--r-- | Build/source/libs/harfbuzz/version.ac | 2 |
146 files changed, 4021 insertions, 2123 deletions
diff --git a/Build/source/libs/harfbuzz/ChangeLog b/Build/source/libs/harfbuzz/ChangeLog index 56d47fc0610..9b7021edc54 100644 --- a/Build/source/libs/harfbuzz/ChangeLog +++ b/Build/source/libs/harfbuzz/ChangeLog @@ -1,3 +1,8 @@ +2013-10-29 Peter Breitenlohner <peb@mppmu.mpg.de> + + Import harfbuzz-0.9.23. + * version.ac: Adjust. + 2013-10-04 Peter Breitenlohner <peb@mppmu.mpg.de> Import harfbuzz-0.9.22. diff --git a/Build/source/libs/harfbuzz/Makefile.in b/Build/source/libs/harfbuzz/Makefile.in index 77b5e4b1384..8f97d2d8d43 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.22/src/hb-version.h.in \ + $(top_srcdir)/harfbuzz-0.9.23/src/hb-version.h.in \ $(am__dist_check_SCRIPTS_DIST) \ $(top_srcdir)/../../build-aux/depcomp \ $(top_srcdir)/../../build-aux/test-driver ChangeLog \ @@ -771,7 +771,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.22/src/hb-version.h.in +hb-version.h: $(top_builddir)/config.status $(top_srcdir)/harfbuzz-0.9.23/src/hb-version.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ clean-noinstLIBRARIES: diff --git a/Build/source/libs/harfbuzz/configure b/Build/source/libs/harfbuzz/configure index 1093db05143..60703959f19 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.22. +# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 0.9.23. # # 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.22' -PACKAGE_STRING='harfbuzz (TeX Live) 0.9.22' +PACKAGE_VERSION='0.9.23' +PACKAGE_STRING='harfbuzz (TeX Live) 0.9.23' PACKAGE_BUGREPORT='tex-k@tug.org' PACKAGE_URL='' -ac_unique_file="harfbuzz-0.9.22/src/harfbuzz.pc.in" +ac_unique_file="harfbuzz-0.9.23/src/harfbuzz.pc.in" # Factoring default headers for most tests. ac_includes_default="\ #include <stdio.h> @@ -1324,7 +1324,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.22 to adapt to many kinds of systems. +\`configure' configures harfbuzz (TeX Live) 0.9.23 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1395,7 +1395,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of harfbuzz (TeX Live) 0.9.22:";; + short | recursive ) echo "Configuration of harfbuzz (TeX Live) 0.9.23:";; esac cat <<\_ACEOF @@ -1508,7 +1508,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -harfbuzz (TeX Live) configure 0.9.22 +harfbuzz (TeX Live) configure 0.9.23 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1915,7 +1915,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by harfbuzz (TeX Live) $as_me 0.9.22, which was +It was created by harfbuzz (TeX Live) $as_me 0.9.23, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3838,7 +3838,7 @@ fi # Define the identity of the package. PACKAGE='harfbuzz--tex-live-' - VERSION='0.9.22' + VERSION='0.9.23' cat >>confdefs.h <<_ACEOF @@ -4040,8 +4040,8 @@ WARNING_CFLAGS=$kpse_cv_warning_cflags HB_VERSION_MAJOR=0 HB_VERSION_MINOR=9 -HB_VERSION_MICRO=22 -HB_VERSION=0.9.22 +HB_VERSION_MICRO=23 +HB_VERSION=0.9.23 ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -6408,14 +6408,14 @@ $as_echo "#define HAVE_INTEL_ATOMIC_PRIMITIVES 1" >>confdefs.h fi -HARFBUZZ_TREE=harfbuzz-0.9.22 +HARFBUZZ_TREE=harfbuzz-0.9.23 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.22/src/hb-version.h.in" +ac_config_files="$ac_config_files Makefile include/Makefile hb-version.h:harfbuzz-0.9.23/src/hb-version.h.in" cat >confcache <<\_ACEOF @@ -6964,7 +6964,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.22, which was +This file was extended by harfbuzz (TeX Live) $as_me 0.9.23, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -7030,7 +7030,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.22 +harfbuzz (TeX Live) config.status 0.9.23 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -7163,7 +7163,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.22/src/hb-version.h.in" ;; + "hb-version.h") CONFIG_FILES="$CONFIG_FILES hb-version.h:harfbuzz-0.9.23/src/hb-version.h.in" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic-machine.hh deleted file mode 100644 index c251160880c..00000000000 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic-machine.hh +++ /dev/null @@ -1,1443 +0,0 @@ - -#line 1 "../../src/hb-ot-shape-complex-indic-machine.rl" -/* - * Copyright © 2011,2012 Google, Inc. - * - * This is part of HarfBuzz, a text shaping library. - * - * Permission is hereby granted, without written agreement and without - * license or royalty fees, to use, copy, modify, and distribute this - * software and its documentation for any purpose, provided that the - * above copyright notice and the following two paragraphs appear in - * all copies of this software. - * - * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR - * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES - * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN - * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS - * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO - * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - * - * Google Author(s): Behdad Esfahbod - */ - -#ifndef HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH -#define HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH - -#include "hb-private.hh" - - -#line 36 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp" -static const unsigned char _indic_syllable_machine_trans_keys[] = { - 1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, - 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 4u, 4u, 6u, 6u, - 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, - 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, - 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, - 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, - 5u, 7u, 7u, 7u, 4u, 4u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, - 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, - 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, - 1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, - 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 4u, 4u, 6u, 6u, - 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, - 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, - 4u, 14u, 4u, 14u, 4u, 14u, 1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, 7u, 7u, - 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, - 7u, 7u, 4u, 4u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, - 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u, - 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, - 4u, 14u, 5u, 7u, 5u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, - 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 1u, 16u, 13u, 13u, 4u, 4u, 6u, 6u, - 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, - 6u, 6u, 16u, 16u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, - 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, - 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 5u, 14u, 8u, 14u, - 5u, 9u, 9u, 9u, 9u, 9u, 3u, 17u, 3u, 9u, 8u, 9u, 3u, 9u, 3u, 13u, - 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, - 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 6u, 14u, 3u, 14u, 4u, 14u, 1u, 16u, - 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, - 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, - 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, - 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 3u, 14u, 3u, 14u, - 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, - 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, - 4u, 14u, 5u, 14u, 8u, 14u, 5u, 9u, 9u, 9u, 9u, 9u, 3u, 17u, 3u, 9u, - 8u, 9u, 3u, 9u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, - 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 6u, 14u, - 3u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, - 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, - 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, - 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 4u, 14u, 1u, 16u, 3u, 14u, - 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, - 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, - 3u, 14u, 4u, 14u, 5u, 14u, 8u, 14u, 5u, 9u, 9u, 9u, 9u, 9u, 3u, 17u, - 3u, 9u, 8u, 9u, 3u, 9u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, - 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, - 6u, 14u, 3u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, - 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, - 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, - 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 4u, 14u, - 3u, 14u, 4u, 14u, 3u, 14u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, - 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, - 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 5u, 14u, 8u, 14u, 5u, 9u, - 9u, 9u, 9u, 9u, 3u, 17u, 3u, 9u, 8u, 9u, 3u, 9u, 3u, 13u, 3u, 14u, - 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, - 5u, 14u, 3u, 14u, 4u, 14u, 6u, 14u, 3u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, - 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, - 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, - 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, - 1u, 16u, 1u, 16u, 3u, 14u, 1u, 16u, 3u, 17u, 1u, 16u, 4u, 14u, 1u, 16u, - 3u, 17u, 3u, 14u, 4u, 14u, 5u, 9u, 9u, 9u, 9u, 9u, 3u, 14u, 3u, 14u, - 1u, 16u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, - 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 8u, 14u, 3u, 17u, 3u, 9u, 8u, 9u, - 3u, 9u, 3u, 13u, 1u, 16u, 0 -}; - -static const char _indic_syllable_machine_key_spans[] = { - 16, 1, 3, 3, 1, 3, 3, 1, - 3, 3, 1, 3, 3, 1, 1, 1, - 1, 4, 1, 1, 4, 1, 1, 4, - 1, 1, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 16, 1, 3, 3, - 1, 3, 3, 1, 3, 3, 1, 3, - 3, 1, 1, 1, 1, 4, 1, 1, - 4, 1, 1, 4, 1, 1, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 16, 1, 3, 3, 1, 3, 3, 1, - 3, 3, 1, 3, 3, 1, 1, 1, - 1, 4, 1, 1, 4, 1, 1, 4, - 1, 1, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 16, 1, 3, 3, 1, - 3, 3, 1, 3, 3, 1, 3, 3, - 1, 1, 1, 1, 4, 1, 1, 4, - 1, 1, 4, 1, 1, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 3, 3, 3, 3, 1, 3, 3, - 1, 3, 3, 1, 16, 1, 1, 1, - 1, 4, 1, 1, 4, 1, 1, 4, - 1, 1, 16, 15, 12, 11, 16, 15, - 12, 11, 16, 15, 12, 11, 16, 15, - 12, 11, 16, 15, 12, 11, 10, 7, - 5, 1, 1, 15, 7, 2, 7, 11, - 12, 12, 11, 10, 12, 11, 10, 12, - 11, 10, 12, 11, 9, 12, 11, 16, - 12, 12, 16, 16, 16, 16, 16, 12, - 12, 16, 16, 16, 16, 16, 12, 12, - 16, 16, 16, 16, 16, 12, 12, 16, - 16, 16, 16, 16, 12, 12, 12, 12, - 11, 16, 15, 12, 11, 16, 15, 12, - 11, 16, 15, 12, 11, 16, 15, 12, - 11, 10, 7, 5, 1, 1, 15, 7, - 2, 7, 11, 12, 12, 11, 10, 12, - 11, 10, 12, 11, 10, 12, 11, 9, - 12, 16, 12, 12, 16, 16, 16, 16, - 16, 12, 12, 16, 16, 16, 16, 16, - 12, 12, 16, 16, 16, 16, 16, 12, - 12, 16, 16, 16, 16, 11, 16, 12, - 12, 11, 16, 15, 12, 11, 16, 15, - 12, 11, 16, 15, 12, 11, 16, 15, - 12, 11, 10, 7, 5, 1, 1, 15, - 7, 2, 7, 11, 12, 12, 11, 10, - 12, 11, 10, 12, 11, 10, 12, 11, - 9, 12, 16, 12, 12, 16, 16, 16, - 16, 16, 12, 12, 16, 16, 16, 16, - 16, 12, 12, 16, 16, 16, 16, 16, - 12, 12, 16, 16, 16, 16, 16, 11, - 12, 11, 12, 12, 11, 16, 15, 12, - 11, 16, 15, 12, 11, 16, 15, 12, - 11, 16, 15, 12, 11, 10, 7, 5, - 1, 1, 15, 7, 2, 7, 11, 12, - 12, 11, 10, 12, 11, 10, 12, 11, - 10, 12, 11, 9, 12, 16, 12, 12, - 16, 16, 16, 16, 16, 12, 12, 16, - 16, 16, 16, 16, 12, 12, 16, 16, - 16, 16, 16, 12, 12, 16, 16, 16, - 16, 16, 12, 16, 15, 16, 11, 16, - 15, 12, 11, 5, 1, 1, 12, 12, - 16, 12, 11, 10, 12, 11, 10, 12, - 11, 10, 12, 11, 7, 15, 7, 2, - 7, 11, 16 -}; - -static const short _indic_syllable_machine_index_offsets[] = { - 0, 17, 19, 23, 27, 29, 33, 37, - 39, 43, 47, 49, 53, 57, 59, 61, - 63, 65, 70, 72, 74, 79, 81, 83, - 88, 90, 92, 104, 116, 128, 140, 152, - 164, 176, 188, 200, 212, 229, 231, 235, - 239, 241, 245, 249, 251, 255, 259, 261, - 265, 269, 271, 273, 275, 277, 282, 284, - 286, 291, 293, 295, 300, 302, 304, 316, - 328, 340, 352, 364, 376, 388, 400, 412, - 424, 441, 443, 447, 451, 453, 457, 461, - 463, 467, 471, 473, 477, 481, 483, 485, - 487, 489, 494, 496, 498, 503, 505, 507, - 512, 514, 516, 528, 540, 552, 564, 576, - 588, 600, 612, 624, 641, 643, 647, 651, - 653, 657, 661, 663, 667, 671, 673, 677, - 681, 683, 685, 687, 689, 694, 696, 698, - 703, 705, 707, 712, 714, 716, 728, 740, - 752, 764, 776, 788, 800, 812, 824, 836, - 848, 860, 864, 868, 872, 876, 878, 882, - 886, 888, 892, 896, 898, 915, 917, 919, - 921, 923, 928, 930, 932, 937, 939, 941, - 946, 948, 950, 967, 983, 996, 1008, 1025, - 1041, 1054, 1066, 1083, 1099, 1112, 1124, 1141, - 1157, 1170, 1182, 1199, 1215, 1228, 1240, 1251, - 1259, 1265, 1267, 1269, 1285, 1293, 1296, 1304, - 1316, 1329, 1342, 1354, 1365, 1378, 1390, 1401, - 1414, 1426, 1437, 1450, 1462, 1472, 1485, 1497, - 1514, 1527, 1540, 1557, 1574, 1591, 1608, 1625, - 1638, 1651, 1668, 1685, 1702, 1719, 1736, 1749, - 1762, 1779, 1796, 1813, 1830, 1847, 1860, 1873, - 1890, 1907, 1924, 1941, 1958, 1971, 1984, 1997, - 2010, 2022, 2039, 2055, 2068, 2080, 2097, 2113, - 2126, 2138, 2155, 2171, 2184, 2196, 2213, 2229, - 2242, 2254, 2265, 2273, 2279, 2281, 2283, 2299, - 2307, 2310, 2318, 2330, 2343, 2356, 2368, 2379, - 2392, 2404, 2415, 2428, 2440, 2451, 2464, 2476, - 2486, 2499, 2516, 2529, 2542, 2559, 2576, 2593, - 2610, 2627, 2640, 2653, 2670, 2687, 2704, 2721, - 2738, 2751, 2764, 2781, 2798, 2815, 2832, 2849, - 2862, 2875, 2892, 2909, 2926, 2943, 2955, 2972, - 2985, 2998, 3010, 3027, 3043, 3056, 3068, 3085, - 3101, 3114, 3126, 3143, 3159, 3172, 3184, 3201, - 3217, 3230, 3242, 3253, 3261, 3267, 3269, 3271, - 3287, 3295, 3298, 3306, 3318, 3331, 3344, 3356, - 3367, 3380, 3392, 3403, 3416, 3428, 3439, 3452, - 3464, 3474, 3487, 3504, 3517, 3530, 3547, 3564, - 3581, 3598, 3615, 3628, 3641, 3658, 3675, 3692, - 3709, 3726, 3739, 3752, 3769, 3786, 3803, 3820, - 3837, 3850, 3863, 3880, 3897, 3914, 3931, 3948, - 3960, 3973, 3985, 3998, 4011, 4023, 4040, 4056, - 4069, 4081, 4098, 4114, 4127, 4139, 4156, 4172, - 4185, 4197, 4214, 4230, 4243, 4255, 4266, 4274, - 4280, 4282, 4284, 4300, 4308, 4311, 4319, 4331, - 4344, 4357, 4369, 4380, 4393, 4405, 4416, 4429, - 4441, 4452, 4465, 4477, 4487, 4500, 4517, 4530, - 4543, 4560, 4577, 4594, 4611, 4628, 4641, 4654, - 4671, 4688, 4705, 4722, 4739, 4752, 4765, 4782, - 4799, 4816, 4833, 4850, 4863, 4876, 4893, 4910, - 4927, 4944, 4961, 4974, 4991, 5007, 5024, 5036, - 5053, 5069, 5082, 5094, 5100, 5102, 5104, 5117, - 5130, 5147, 5160, 5172, 5183, 5196, 5208, 5219, - 5232, 5244, 5255, 5268, 5280, 5288, 5304, 5312, - 5315, 5323, 5335 -}; - -static const short _indic_syllable_machine_indicies[] = { - 1, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, - 0, 3, 0, 4, 4, 5, 0, 6, - 6, 5, 0, 5, 0, 7, 7, 8, - 0, 9, 9, 8, 0, 8, 0, 10, - 10, 11, 0, 12, 12, 11, 0, 11, - 0, 13, 13, 14, 0, 15, 15, 14, - 0, 14, 0, 16, 0, 17, 0, 18, - 0, 19, 13, 13, 14, 0, 20, 0, - 21, 0, 22, 10, 10, 11, 0, 23, - 0, 24, 0, 25, 7, 7, 8, 0, - 26, 0, 27, 0, 28, 4, 4, 5, - 0, 0, 0, 0, 0, 0, 28, 0, - 28, 4, 4, 5, 0, 0, 0, 0, - 0, 29, 28, 0, 30, 4, 4, 5, - 0, 0, 0, 0, 0, 0, 30, 0, - 30, 4, 4, 5, 0, 0, 0, 0, - 0, 31, 30, 0, 32, 4, 4, 5, - 0, 0, 0, 0, 0, 0, 32, 0, - 32, 4, 4, 5, 0, 0, 0, 0, - 0, 33, 32, 0, 34, 4, 4, 5, - 0, 0, 0, 0, 0, 0, 34, 0, - 34, 4, 4, 5, 0, 0, 0, 0, - 0, 35, 34, 0, 36, 4, 4, 5, - 0, 0, 0, 0, 0, 0, 36, 0, - 36, 4, 4, 5, 0, 0, 0, 0, - 0, 37, 36, 0, 39, 40, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 39, 38, 41, 38, 42, - 42, 43, 38, 44, 44, 43, 38, 43, - 38, 45, 45, 46, 38, 47, 47, 46, - 38, 46, 38, 48, 48, 49, 38, 50, - 50, 49, 38, 49, 38, 51, 51, 52, - 38, 53, 53, 52, 38, 52, 38, 54, - 38, 55, 38, 56, 38, 57, 51, 51, - 52, 38, 58, 38, 59, 38, 60, 48, - 48, 49, 38, 61, 38, 62, 38, 63, - 45, 45, 46, 38, 64, 38, 65, 38, - 66, 42, 42, 43, 38, 38, 38, 38, - 38, 38, 66, 38, 66, 42, 42, 43, - 38, 38, 38, 38, 38, 67, 66, 38, - 68, 42, 42, 43, 38, 38, 38, 38, - 38, 38, 68, 38, 68, 42, 42, 43, - 38, 38, 38, 38, 38, 69, 68, 38, - 70, 42, 42, 43, 38, 38, 38, 38, - 38, 38, 70, 38, 70, 42, 42, 43, - 38, 38, 38, 38, 38, 71, 70, 38, - 72, 42, 42, 43, 38, 38, 38, 38, - 38, 38, 72, 38, 72, 42, 42, 43, - 38, 38, 38, 38, 38, 73, 72, 38, - 74, 42, 42, 43, 38, 38, 38, 38, - 38, 38, 74, 38, 74, 42, 42, 43, - 38, 38, 38, 38, 38, 75, 74, 38, - 77, 78, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 77, - 76, 79, 76, 80, 80, 81, 76, 83, - 83, 81, 82, 81, 82, 84, 84, 85, - 76, 86, 86, 85, 76, 85, 76, 87, - 87, 88, 76, 89, 89, 88, 76, 88, - 76, 90, 90, 91, 76, 92, 92, 91, - 76, 91, 76, 93, 76, 94, 76, 95, - 76, 96, 90, 90, 91, 76, 97, 76, - 98, 76, 99, 87, 87, 88, 76, 100, - 76, 101, 76, 102, 84, 84, 85, 76, - 103, 76, 104, 76, 105, 80, 80, 81, - 76, 76, 76, 76, 76, 76, 105, 76, - 105, 80, 80, 81, 76, 76, 76, 76, - 76, 106, 105, 76, 107, 80, 80, 81, - 76, 76, 76, 76, 76, 76, 107, 76, - 107, 80, 80, 81, 76, 76, 76, 76, - 76, 108, 107, 76, 109, 80, 80, 81, - 76, 76, 76, 76, 76, 76, 109, 76, - 109, 80, 80, 81, 76, 76, 76, 76, - 76, 110, 109, 76, 111, 80, 80, 81, - 82, 82, 82, 82, 82, 82, 111, 82, - 111, 80, 80, 81, 76, 76, 76, 76, - 76, 112, 111, 76, 113, 80, 80, 81, - 76, 76, 76, 76, 76, 76, 113, 76, - 115, 116, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 115, - 114, 117, 114, 118, 118, 119, 114, 120, - 120, 119, 114, 119, 114, 121, 121, 122, - 114, 123, 123, 122, 114, 122, 114, 124, - 124, 125, 114, 126, 126, 125, 114, 125, - 114, 127, 127, 128, 114, 129, 129, 128, - 114, 128, 114, 130, 114, 131, 114, 132, - 114, 133, 127, 127, 128, 114, 134, 114, - 135, 114, 136, 124, 124, 125, 114, 137, - 114, 138, 114, 139, 121, 121, 122, 114, - 140, 114, 141, 114, 142, 118, 118, 119, - 114, 114, 114, 114, 114, 114, 142, 114, - 142, 118, 118, 119, 114, 114, 114, 114, - 114, 143, 142, 114, 144, 118, 118, 119, - 114, 114, 114, 114, 114, 114, 144, 114, - 144, 118, 118, 119, 114, 114, 114, 114, - 114, 145, 144, 114, 146, 118, 118, 119, - 114, 114, 114, 114, 114, 114, 146, 114, - 146, 118, 118, 119, 114, 114, 114, 114, - 114, 147, 146, 114, 148, 118, 118, 119, - 114, 114, 114, 114, 114, 114, 148, 114, - 148, 118, 118, 119, 114, 114, 114, 114, - 114, 149, 148, 114, 150, 118, 118, 119, - 114, 114, 114, 114, 114, 114, 150, 114, - 150, 118, 118, 119, 114, 114, 114, 114, - 114, 151, 150, 114, 113, 80, 80, 81, - 76, 76, 76, 76, 76, 152, 113, 76, - 111, 80, 80, 81, 0, 0, 0, 0, - 0, 153, 111, 0, 154, 154, 155, 0, - 6, 6, 155, 0, 156, 156, 157, 0, - 158, 158, 157, 0, 157, 0, 159, 159, - 160, 0, 161, 161, 160, 0, 160, 0, - 162, 162, 163, 0, 164, 164, 163, 0, - 163, 0, 165, 166, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 165, 0, 167, 0, 168, 0, 169, - 0, 170, 0, 171, 162, 162, 163, 0, - 172, 0, 173, 0, 174, 159, 159, 160, - 0, 175, 0, 176, 0, 177, 156, 156, - 157, 0, 178, 0, 179, 0, 181, 182, - 183, 184, 185, 186, 81, 187, 188, 180, - 189, 189, 152, 190, 191, 192, 180, 194, - 195, 196, 197, 5, 198, 199, 200, 193, - 193, 37, 201, 193, 193, 181, 193, 202, - 195, 203, 203, 5, 198, 199, 200, 193, - 193, 193, 201, 193, 195, 203, 203, 5, - 198, 199, 200, 193, 193, 193, 201, 193, - 204, 193, 193, 193, 18, 205, 193, 198, - 199, 193, 193, 193, 193, 206, 193, 204, - 193, 207, 208, 209, 210, 5, 198, 199, - 200, 193, 193, 35, 211, 193, 193, 204, - 193, 212, 208, 213, 213, 5, 198, 199, - 200, 193, 193, 193, 211, 193, 208, 213, - 213, 5, 198, 199, 200, 193, 193, 193, - 211, 193, 214, 193, 193, 193, 18, 215, - 193, 198, 199, 193, 193, 193, 193, 206, - 193, 214, 193, 216, 217, 218, 219, 5, - 198, 199, 200, 193, 193, 33, 220, 193, - 193, 214, 193, 221, 217, 222, 222, 5, - 198, 199, 200, 193, 193, 193, 220, 193, - 217, 222, 222, 5, 198, 199, 200, 193, - 193, 193, 220, 193, 223, 193, 193, 193, - 18, 224, 193, 198, 199, 193, 193, 193, - 193, 206, 193, 223, 193, 225, 226, 227, - 228, 5, 198, 199, 200, 193, 193, 31, - 229, 193, 193, 223, 193, 230, 226, 231, - 231, 5, 198, 199, 200, 193, 193, 193, - 229, 193, 226, 231, 231, 5, 198, 199, - 200, 193, 193, 193, 229, 193, 232, 193, - 193, 193, 18, 233, 193, 198, 199, 193, - 193, 193, 193, 206, 193, 232, 193, 234, - 235, 236, 237, 5, 198, 199, 200, 193, - 193, 29, 238, 193, 193, 232, 193, 239, - 235, 240, 240, 5, 198, 199, 200, 193, - 193, 193, 238, 193, 235, 240, 240, 5, - 198, 199, 200, 193, 193, 193, 238, 193, - 18, 241, 193, 198, 199, 193, 193, 193, - 193, 206, 193, 198, 199, 193, 193, 193, - 193, 206, 193, 242, 193, 193, 193, 199, - 193, 199, 193, 243, 193, 244, 193, 245, - 246, 193, 198, 199, 193, 193, 193, 3, - 193, 193, 193, 1, 193, 2, 193, 193, - 193, 193, 198, 199, 193, 198, 199, 193, - 244, 193, 193, 193, 193, 198, 199, 193, - 244, 193, 245, 193, 193, 198, 199, 193, - 193, 193, 3, 193, 18, 193, 247, 247, - 5, 198, 199, 193, 193, 193, 193, 206, - 193, 248, 27, 249, 250, 8, 198, 199, - 193, 193, 193, 193, 206, 193, 27, 249, - 250, 8, 198, 199, 193, 193, 193, 193, - 206, 193, 249, 249, 8, 198, 199, 193, - 193, 193, 193, 206, 193, 251, 24, 252, - 253, 11, 198, 199, 193, 193, 193, 193, - 206, 193, 24, 252, 253, 11, 198, 199, - 193, 193, 193, 193, 206, 193, 252, 252, - 11, 198, 199, 193, 193, 193, 193, 206, - 193, 254, 21, 255, 256, 14, 198, 199, - 193, 193, 193, 193, 206, 193, 21, 255, - 256, 14, 198, 199, 193, 193, 193, 193, - 206, 193, 255, 255, 14, 198, 199, 193, - 193, 193, 193, 206, 193, 257, 18, 193, - 258, 193, 198, 199, 193, 193, 193, 193, - 206, 193, 18, 193, 258, 193, 198, 199, - 193, 193, 193, 193, 206, 193, 259, 193, - 198, 199, 193, 193, 193, 193, 206, 193, - 18, 193, 193, 193, 193, 198, 199, 193, - 193, 193, 193, 206, 193, 235, 240, 240, - 5, 198, 199, 193, 193, 193, 193, 238, - 193, 1, 2, 193, 193, 18, 241, 193, - 198, 199, 193, 193, 193, 193, 206, 193, - 1, 193, 234, 235, 240, 240, 5, 198, - 199, 200, 193, 193, 193, 238, 193, 234, - 235, 236, 240, 5, 198, 199, 200, 193, - 193, 29, 238, 193, 232, 193, 260, 193, - 247, 247, 5, 198, 199, 193, 193, 193, - 193, 206, 193, 232, 193, 232, 193, 193, - 193, 193, 193, 193, 198, 199, 193, 193, - 193, 193, 206, 193, 232, 193, 232, 193, - 193, 193, 193, 261, 193, 198, 199, 193, - 193, 193, 193, 206, 193, 232, 193, 232, - 193, 260, 193, 193, 193, 193, 198, 199, - 193, 193, 193, 193, 206, 193, 232, 193, - 232, 2, 193, 193, 18, 233, 193, 198, - 199, 193, 193, 193, 193, 206, 193, 232, - 193, 225, 226, 231, 231, 5, 198, 199, - 200, 193, 193, 193, 229, 193, 225, 226, - 227, 231, 5, 198, 199, 200, 193, 193, - 31, 229, 193, 223, 193, 262, 193, 247, - 247, 5, 198, 199, 193, 193, 193, 193, - 206, 193, 223, 193, 223, 193, 193, 193, - 193, 193, 193, 198, 199, 193, 193, 193, - 193, 206, 193, 223, 193, 223, 193, 193, - 193, 193, 263, 193, 198, 199, 193, 193, - 193, 193, 206, 193, 223, 193, 223, 193, - 262, 193, 193, 193, 193, 198, 199, 193, - 193, 193, 193, 206, 193, 223, 193, 223, - 2, 193, 193, 18, 224, 193, 198, 199, - 193, 193, 193, 193, 206, 193, 223, 193, - 216, 217, 222, 222, 5, 198, 199, 200, - 193, 193, 193, 220, 193, 216, 217, 218, - 222, 5, 198, 199, 200, 193, 193, 33, - 220, 193, 214, 193, 264, 193, 247, 247, - 5, 198, 199, 193, 193, 193, 193, 206, - 193, 214, 193, 214, 193, 193, 193, 193, - 193, 193, 198, 199, 193, 193, 193, 193, - 206, 193, 214, 193, 214, 193, 193, 193, - 193, 265, 193, 198, 199, 193, 193, 193, - 193, 206, 193, 214, 193, 214, 193, 264, - 193, 193, 193, 193, 198, 199, 193, 193, - 193, 193, 206, 193, 214, 193, 214, 2, - 193, 193, 18, 215, 193, 198, 199, 193, - 193, 193, 193, 206, 193, 214, 193, 207, - 208, 213, 213, 5, 198, 199, 200, 193, - 193, 193, 211, 193, 207, 208, 209, 213, - 5, 198, 199, 200, 193, 193, 35, 211, - 193, 204, 193, 266, 193, 247, 247, 5, - 198, 199, 193, 193, 193, 193, 206, 193, - 204, 193, 204, 193, 193, 193, 193, 193, - 193, 198, 199, 193, 193, 193, 193, 206, - 193, 204, 193, 204, 193, 193, 193, 193, - 267, 193, 198, 199, 193, 193, 193, 193, - 206, 193, 204, 193, 204, 193, 266, 193, - 193, 193, 193, 198, 199, 193, 193, 193, - 193, 206, 193, 204, 193, 204, 2, 193, - 193, 18, 205, 193, 198, 199, 193, 193, - 193, 193, 206, 193, 204, 193, 194, 195, - 203, 203, 5, 198, 199, 200, 193, 193, - 193, 201, 193, 194, 195, 196, 203, 5, - 198, 199, 200, 193, 193, 37, 201, 193, - 269, 270, 271, 272, 43, 273, 274, 268, - 268, 268, 75, 275, 268, 276, 270, 277, - 272, 43, 273, 274, 268, 268, 268, 268, - 275, 268, 270, 277, 272, 43, 273, 274, - 268, 268, 268, 268, 275, 268, 278, 268, - 268, 268, 56, 279, 268, 273, 274, 268, - 268, 268, 268, 280, 268, 278, 268, 281, - 282, 283, 284, 43, 273, 274, 268, 268, - 268, 73, 285, 268, 268, 278, 268, 286, - 282, 287, 287, 43, 273, 274, 268, 268, - 268, 268, 285, 268, 282, 287, 287, 43, - 273, 274, 268, 268, 268, 268, 285, 268, - 288, 268, 268, 268, 56, 289, 268, 273, - 274, 268, 268, 268, 268, 280, 268, 288, - 268, 290, 291, 292, 293, 43, 273, 274, - 268, 268, 268, 71, 294, 268, 268, 288, - 268, 295, 291, 296, 296, 43, 273, 274, - 268, 268, 268, 268, 294, 268, 291, 296, - 296, 43, 273, 274, 268, 268, 268, 268, - 294, 268, 297, 268, 268, 268, 56, 298, - 268, 273, 274, 268, 268, 268, 268, 280, - 268, 297, 268, 299, 300, 301, 302, 43, - 273, 274, 268, 268, 268, 69, 303, 268, - 268, 297, 268, 304, 300, 305, 305, 43, - 273, 274, 268, 268, 268, 268, 303, 268, - 300, 305, 305, 43, 273, 274, 268, 268, - 268, 268, 303, 268, 306, 268, 268, 268, - 56, 307, 268, 273, 274, 268, 268, 268, - 268, 280, 268, 306, 268, 308, 309, 310, - 311, 43, 273, 274, 268, 268, 268, 67, - 312, 268, 268, 306, 268, 313, 309, 314, - 314, 43, 273, 274, 268, 268, 268, 268, - 312, 268, 309, 314, 314, 43, 273, 274, - 268, 268, 268, 268, 312, 268, 56, 315, - 268, 273, 274, 268, 268, 268, 268, 280, - 268, 273, 274, 268, 268, 268, 268, 280, - 268, 316, 268, 268, 268, 274, 268, 274, - 268, 317, 268, 318, 268, 319, 320, 268, - 273, 274, 268, 268, 268, 41, 268, 268, - 268, 39, 268, 40, 268, 268, 268, 268, - 273, 274, 268, 273, 274, 268, 318, 268, - 268, 268, 268, 273, 274, 268, 318, 268, - 319, 268, 268, 273, 274, 268, 268, 268, - 41, 268, 56, 268, 321, 321, 43, 273, - 274, 268, 268, 268, 268, 280, 268, 322, - 65, 323, 324, 46, 273, 274, 268, 268, - 268, 268, 280, 268, 65, 323, 324, 46, - 273, 274, 268, 268, 268, 268, 280, 268, - 323, 323, 46, 273, 274, 268, 268, 268, - 268, 280, 268, 325, 62, 326, 327, 49, - 273, 274, 268, 268, 268, 268, 280, 268, - 62, 326, 327, 49, 273, 274, 268, 268, - 268, 268, 280, 268, 326, 326, 49, 273, - 274, 268, 268, 268, 268, 280, 268, 328, - 59, 329, 330, 52, 273, 274, 268, 268, - 268, 268, 280, 268, 59, 329, 330, 52, - 273, 274, 268, 268, 268, 268, 280, 268, - 329, 329, 52, 273, 274, 268, 268, 268, - 268, 280, 268, 331, 56, 268, 332, 268, - 273, 274, 268, 268, 268, 268, 280, 268, - 56, 268, 332, 268, 273, 274, 268, 268, - 268, 268, 280, 268, 333, 268, 273, 274, - 268, 268, 268, 268, 280, 268, 56, 268, - 268, 268, 268, 273, 274, 268, 268, 268, - 268, 280, 268, 39, 40, 268, 268, 56, - 315, 268, 273, 274, 268, 268, 268, 268, - 280, 268, 39, 268, 308, 309, 314, 314, - 43, 273, 274, 268, 268, 268, 268, 312, - 268, 308, 309, 310, 314, 43, 273, 274, - 268, 268, 268, 67, 312, 268, 306, 268, - 334, 268, 321, 321, 43, 273, 274, 268, - 268, 268, 268, 280, 268, 306, 268, 306, - 268, 268, 268, 268, 268, 268, 273, 274, - 268, 268, 268, 268, 280, 268, 306, 268, - 306, 268, 268, 268, 268, 335, 268, 273, - 274, 268, 268, 268, 268, 280, 268, 306, - 268, 306, 268, 334, 268, 268, 268, 268, - 273, 274, 268, 268, 268, 268, 280, 268, - 306, 268, 306, 40, 268, 268, 56, 307, - 268, 273, 274, 268, 268, 268, 268, 280, - 268, 306, 268, 299, 300, 305, 305, 43, - 273, 274, 268, 268, 268, 268, 303, 268, - 299, 300, 301, 305, 43, 273, 274, 268, - 268, 268, 69, 303, 268, 297, 268, 336, - 268, 321, 321, 43, 273, 274, 268, 268, - 268, 268, 280, 268, 297, 268, 297, 268, - 268, 268, 268, 268, 268, 273, 274, 268, - 268, 268, 268, 280, 268, 297, 268, 297, - 268, 268, 268, 268, 337, 268, 273, 274, - 268, 268, 268, 268, 280, 268, 297, 268, - 297, 268, 336, 268, 268, 268, 268, 273, - 274, 268, 268, 268, 268, 280, 268, 297, - 268, 297, 40, 268, 268, 56, 298, 268, - 273, 274, 268, 268, 268, 268, 280, 268, - 297, 268, 290, 291, 296, 296, 43, 273, - 274, 268, 268, 268, 268, 294, 268, 290, - 291, 292, 296, 43, 273, 274, 268, 268, - 268, 71, 294, 268, 288, 268, 338, 268, - 321, 321, 43, 273, 274, 268, 268, 268, - 268, 280, 268, 288, 268, 288, 268, 268, - 268, 268, 268, 268, 273, 274, 268, 268, - 268, 268, 280, 268, 288, 268, 288, 268, - 268, 268, 268, 339, 268, 273, 274, 268, - 268, 268, 268, 280, 268, 288, 268, 288, - 268, 338, 268, 268, 268, 268, 273, 274, - 268, 268, 268, 268, 280, 268, 288, 268, - 288, 40, 268, 268, 56, 289, 268, 273, - 274, 268, 268, 268, 268, 280, 268, 288, - 268, 281, 282, 287, 287, 43, 273, 274, - 268, 268, 268, 268, 285, 268, 281, 282, - 283, 287, 43, 273, 274, 268, 268, 268, - 73, 285, 268, 278, 268, 340, 268, 321, - 321, 43, 273, 274, 268, 268, 268, 268, - 280, 268, 278, 268, 278, 268, 268, 268, - 268, 268, 268, 273, 274, 268, 268, 268, - 268, 280, 268, 278, 268, 278, 268, 268, - 268, 268, 341, 268, 273, 274, 268, 268, - 268, 268, 280, 268, 278, 268, 278, 268, - 340, 268, 268, 268, 268, 273, 274, 268, - 268, 268, 268, 280, 268, 278, 268, 74, - 42, 42, 43, 268, 268, 268, 268, 268, - 268, 74, 268, 278, 40, 268, 268, 56, - 279, 268, 273, 274, 268, 268, 268, 268, - 280, 268, 278, 268, 269, 270, 277, 272, - 43, 273, 274, 268, 268, 268, 268, 275, - 268, 343, 184, 344, 344, 81, 187, 188, - 342, 342, 342, 342, 190, 342, 184, 344, - 344, 81, 187, 188, 342, 342, 342, 342, - 190, 342, 345, 342, 342, 342, 95, 346, - 342, 187, 188, 342, 342, 342, 342, 347, - 342, 345, 342, 348, 349, 350, 351, 81, - 187, 188, 342, 342, 342, 112, 352, 342, - 342, 345, 342, 353, 349, 354, 354, 81, - 187, 188, 342, 342, 342, 342, 352, 342, - 349, 354, 354, 81, 187, 188, 342, 342, - 342, 342, 352, 342, 355, 342, 342, 342, - 95, 356, 342, 187, 188, 342, 342, 342, - 342, 347, 342, 355, 342, 357, 358, 359, - 360, 81, 187, 188, 342, 342, 342, 110, - 361, 342, 342, 355, 342, 362, 358, 363, - 363, 81, 187, 188, 342, 342, 342, 342, - 361, 342, 358, 363, 363, 81, 187, 188, - 342, 342, 342, 342, 361, 342, 364, 342, - 342, 342, 95, 365, 342, 187, 188, 342, - 342, 342, 342, 347, 342, 364, 342, 366, - 367, 368, 369, 81, 187, 188, 342, 342, - 342, 108, 370, 342, 342, 364, 342, 371, - 367, 372, 372, 81, 187, 188, 342, 342, - 342, 342, 370, 342, 367, 372, 372, 81, - 187, 188, 342, 342, 342, 342, 370, 342, - 373, 342, 342, 342, 95, 374, 342, 187, - 188, 342, 342, 342, 342, 347, 342, 373, - 342, 375, 376, 377, 378, 81, 187, 188, - 342, 342, 342, 106, 379, 342, 342, 373, - 342, 380, 376, 381, 381, 81, 187, 188, - 342, 342, 342, 342, 379, 342, 376, 381, - 381, 81, 187, 188, 342, 342, 342, 342, - 379, 342, 95, 382, 342, 187, 188, 342, - 342, 342, 342, 347, 342, 187, 188, 342, - 342, 342, 342, 347, 342, 383, 342, 342, - 342, 188, 342, 188, 342, 384, 342, 385, - 342, 386, 387, 342, 187, 188, 342, 342, - 342, 79, 342, 342, 342, 77, 342, 78, - 342, 342, 342, 342, 187, 188, 342, 187, - 188, 342, 385, 342, 342, 342, 342, 187, - 188, 342, 385, 342, 386, 342, 342, 187, - 188, 342, 342, 342, 79, 342, 95, 342, - 388, 388, 81, 187, 188, 342, 342, 342, - 342, 347, 342, 389, 104, 390, 391, 85, - 187, 188, 342, 342, 342, 342, 347, 342, - 104, 390, 391, 85, 187, 188, 342, 342, - 342, 342, 347, 342, 390, 390, 85, 187, - 188, 342, 342, 342, 342, 347, 342, 392, - 101, 393, 394, 88, 187, 188, 342, 342, - 342, 342, 347, 342, 101, 393, 394, 88, - 187, 188, 342, 342, 342, 342, 347, 342, - 393, 393, 88, 187, 188, 342, 342, 342, - 342, 347, 342, 395, 98, 396, 397, 91, - 187, 188, 342, 342, 342, 342, 347, 342, - 98, 396, 397, 91, 187, 188, 342, 342, - 342, 342, 347, 342, 396, 396, 91, 187, - 188, 342, 342, 342, 342, 347, 342, 398, - 95, 342, 399, 342, 187, 188, 342, 342, - 342, 342, 347, 342, 95, 342, 399, 342, - 187, 188, 342, 342, 342, 342, 347, 342, - 400, 342, 187, 188, 342, 342, 342, 342, - 347, 342, 95, 342, 342, 342, 342, 187, - 188, 342, 342, 342, 342, 347, 342, 77, - 78, 342, 342, 95, 382, 342, 187, 188, - 342, 342, 342, 342, 347, 342, 77, 342, - 375, 376, 381, 381, 81, 187, 188, 342, - 342, 342, 342, 379, 342, 375, 376, 377, - 381, 81, 187, 188, 342, 342, 342, 106, - 379, 342, 373, 342, 401, 342, 388, 388, - 81, 187, 188, 342, 342, 342, 342, 347, - 342, 373, 342, 373, 342, 342, 342, 342, - 342, 342, 187, 188, 342, 342, 342, 342, - 347, 342, 373, 342, 373, 342, 342, 342, - 342, 402, 342, 187, 188, 342, 342, 342, - 342, 347, 342, 373, 342, 373, 342, 401, - 342, 342, 342, 342, 187, 188, 342, 342, - 342, 342, 347, 342, 373, 342, 373, 78, - 342, 342, 95, 374, 342, 187, 188, 342, - 342, 342, 342, 347, 342, 373, 342, 366, - 367, 372, 372, 81, 187, 188, 342, 342, - 342, 342, 370, 342, 366, 367, 368, 372, - 81, 187, 188, 342, 342, 342, 108, 370, - 342, 364, 342, 403, 342, 388, 388, 81, - 187, 188, 342, 342, 342, 342, 347, 342, - 364, 342, 364, 342, 342, 342, 342, 342, - 342, 187, 188, 342, 342, 342, 342, 347, - 342, 364, 342, 364, 342, 342, 342, 342, - 404, 342, 187, 188, 342, 342, 342, 342, - 347, 342, 364, 342, 364, 342, 403, 342, - 342, 342, 342, 187, 188, 342, 342, 342, - 342, 347, 342, 364, 342, 364, 78, 342, - 342, 95, 365, 342, 187, 188, 342, 342, - 342, 342, 347, 342, 364, 342, 357, 358, - 363, 363, 81, 187, 188, 342, 342, 342, - 342, 361, 342, 357, 358, 359, 363, 81, - 187, 188, 342, 342, 342, 110, 361, 342, - 355, 342, 405, 342, 388, 388, 81, 187, - 188, 342, 342, 342, 342, 347, 342, 355, - 342, 355, 342, 342, 342, 342, 342, 342, - 187, 188, 342, 342, 342, 342, 347, 342, - 355, 342, 355, 342, 342, 342, 342, 406, - 342, 187, 188, 342, 342, 342, 342, 347, - 342, 355, 342, 355, 342, 405, 342, 342, - 342, 342, 187, 188, 342, 342, 342, 342, - 347, 342, 355, 342, 355, 78, 342, 342, - 95, 356, 342, 187, 188, 342, 342, 342, - 342, 347, 342, 355, 342, 348, 349, 354, - 354, 81, 187, 188, 342, 342, 342, 342, - 352, 342, 348, 349, 350, 354, 81, 187, - 188, 342, 342, 342, 112, 352, 342, 345, - 342, 407, 342, 388, 388, 81, 187, 188, - 342, 342, 342, 342, 347, 342, 345, 342, - 345, 342, 342, 342, 342, 342, 342, 187, - 188, 342, 342, 342, 342, 347, 342, 345, - 342, 345, 342, 342, 342, 342, 408, 342, - 187, 188, 342, 342, 342, 342, 347, 342, - 345, 342, 345, 342, 407, 342, 342, 342, - 342, 187, 188, 342, 342, 342, 342, 347, - 342, 345, 342, 345, 78, 342, 342, 95, - 346, 342, 187, 188, 342, 342, 342, 342, - 347, 342, 345, 342, 113, 80, 80, 81, - 409, 409, 409, 409, 409, 152, 113, 409, - 183, 184, 344, 344, 81, 187, 188, 342, - 342, 342, 342, 190, 342, 113, 80, 80, - 81, 409, 409, 409, 409, 409, 409, 113, - 409, 411, 412, 413, 414, 119, 415, 416, - 410, 410, 410, 151, 417, 410, 418, 412, - 414, 414, 119, 415, 416, 410, 410, 410, - 410, 417, 410, 412, 414, 414, 119, 415, - 416, 410, 410, 410, 410, 417, 410, 419, - 410, 410, 410, 132, 420, 410, 415, 416, - 410, 410, 410, 410, 421, 410, 419, 410, - 422, 423, 424, 425, 119, 415, 416, 410, - 410, 410, 149, 426, 410, 410, 419, 410, - 427, 423, 428, 428, 119, 415, 416, 410, - 410, 410, 410, 426, 410, 423, 428, 428, - 119, 415, 416, 410, 410, 410, 410, 426, - 410, 429, 410, 410, 410, 132, 430, 410, - 415, 416, 410, 410, 410, 410, 421, 410, - 429, 410, 431, 432, 433, 434, 119, 415, - 416, 410, 410, 410, 147, 435, 410, 410, - 429, 410, 436, 432, 437, 437, 119, 415, - 416, 410, 410, 410, 410, 435, 410, 432, - 437, 437, 119, 415, 416, 410, 410, 410, - 410, 435, 410, 438, 410, 410, 410, 132, - 439, 410, 415, 416, 410, 410, 410, 410, - 421, 410, 438, 410, 440, 441, 442, 443, - 119, 415, 416, 410, 410, 410, 145, 444, - 410, 410, 438, 410, 445, 441, 446, 446, - 119, 415, 416, 410, 410, 410, 410, 444, - 410, 441, 446, 446, 119, 415, 416, 410, - 410, 410, 410, 444, 410, 447, 410, 410, - 410, 132, 448, 410, 415, 416, 410, 410, - 410, 410, 421, 410, 447, 410, 449, 450, - 451, 452, 119, 415, 416, 410, 410, 410, - 143, 453, 410, 410, 447, 410, 454, 450, - 455, 455, 119, 415, 416, 410, 410, 410, - 410, 453, 410, 450, 455, 455, 119, 415, - 416, 410, 410, 410, 410, 453, 410, 132, - 456, 410, 415, 416, 410, 410, 410, 410, - 421, 410, 415, 416, 410, 410, 410, 410, - 421, 410, 457, 410, 410, 410, 416, 410, - 416, 410, 458, 410, 459, 410, 460, 461, - 410, 415, 416, 410, 410, 410, 117, 410, - 410, 410, 115, 410, 116, 410, 410, 410, - 410, 415, 416, 410, 415, 416, 410, 459, - 410, 410, 410, 410, 415, 416, 410, 459, - 410, 460, 410, 410, 415, 416, 410, 410, - 410, 117, 410, 132, 410, 462, 462, 119, - 415, 416, 410, 410, 410, 410, 421, 410, - 463, 141, 464, 465, 122, 415, 416, 410, - 410, 410, 410, 421, 410, 141, 464, 465, - 122, 415, 416, 410, 410, 410, 410, 421, - 410, 464, 464, 122, 415, 416, 410, 410, - 410, 410, 421, 410, 466, 138, 467, 468, - 125, 415, 416, 410, 410, 410, 410, 421, - 410, 138, 467, 468, 125, 415, 416, 410, - 410, 410, 410, 421, 410, 467, 467, 125, - 415, 416, 410, 410, 410, 410, 421, 410, - 469, 135, 470, 471, 128, 415, 416, 410, - 410, 410, 410, 421, 410, 135, 470, 471, - 128, 415, 416, 410, 410, 410, 410, 421, - 410, 470, 470, 128, 415, 416, 410, 410, - 410, 410, 421, 410, 472, 132, 410, 473, - 410, 415, 416, 410, 410, 410, 410, 421, - 410, 132, 410, 473, 410, 415, 416, 410, - 410, 410, 410, 421, 410, 474, 410, 415, - 416, 410, 410, 410, 410, 421, 410, 132, - 410, 410, 410, 410, 415, 416, 410, 410, - 410, 410, 421, 410, 115, 116, 410, 410, - 132, 456, 410, 415, 416, 410, 410, 410, - 410, 421, 410, 115, 410, 449, 450, 455, - 455, 119, 415, 416, 410, 410, 410, 410, - 453, 410, 449, 450, 451, 455, 119, 415, - 416, 410, 410, 410, 143, 453, 410, 447, - 410, 475, 410, 462, 462, 119, 415, 416, - 410, 410, 410, 410, 421, 410, 447, 410, - 447, 410, 410, 410, 410, 410, 410, 415, - 416, 410, 410, 410, 410, 421, 410, 447, - 410, 447, 410, 410, 410, 410, 476, 410, - 415, 416, 410, 410, 410, 410, 421, 410, - 447, 410, 447, 410, 475, 410, 410, 410, - 410, 415, 416, 410, 410, 410, 410, 421, - 410, 447, 410, 447, 116, 410, 410, 132, - 448, 410, 415, 416, 410, 410, 410, 410, - 421, 410, 447, 410, 440, 441, 446, 446, - 119, 415, 416, 410, 410, 410, 410, 444, - 410, 440, 441, 442, 446, 119, 415, 416, - 410, 410, 410, 145, 444, 410, 438, 410, - 477, 410, 462, 462, 119, 415, 416, 410, - 410, 410, 410, 421, 410, 438, 410, 438, - 410, 410, 410, 410, 410, 410, 415, 416, - 410, 410, 410, 410, 421, 410, 438, 410, - 438, 410, 410, 410, 410, 478, 410, 415, - 416, 410, 410, 410, 410, 421, 410, 438, - 410, 438, 410, 477, 410, 410, 410, 410, - 415, 416, 410, 410, 410, 410, 421, 410, - 438, 410, 438, 116, 410, 410, 132, 439, - 410, 415, 416, 410, 410, 410, 410, 421, - 410, 438, 410, 431, 432, 437, 437, 119, - 415, 416, 410, 410, 410, 410, 435, 410, - 431, 432, 433, 437, 119, 415, 416, 410, - 410, 410, 147, 435, 410, 429, 410, 479, - 410, 462, 462, 119, 415, 416, 410, 410, - 410, 410, 421, 410, 429, 410, 429, 410, - 410, 410, 410, 410, 410, 415, 416, 410, - 410, 410, 410, 421, 410, 429, 410, 429, - 410, 410, 410, 410, 480, 410, 415, 416, - 410, 410, 410, 410, 421, 410, 429, 410, - 429, 410, 479, 410, 410, 410, 410, 415, - 416, 410, 410, 410, 410, 421, 410, 429, - 410, 429, 116, 410, 410, 132, 430, 410, - 415, 416, 410, 410, 410, 410, 421, 410, - 429, 410, 422, 423, 428, 428, 119, 415, - 416, 410, 410, 410, 410, 426, 410, 422, - 423, 424, 428, 119, 415, 416, 410, 410, - 410, 149, 426, 410, 419, 410, 481, 410, - 462, 462, 119, 415, 416, 410, 410, 410, - 410, 421, 410, 419, 410, 419, 410, 410, - 410, 410, 410, 410, 415, 416, 410, 410, - 410, 410, 421, 410, 419, 410, 419, 410, - 410, 410, 410, 482, 410, 415, 416, 410, - 410, 410, 410, 421, 410, 419, 410, 419, - 410, 481, 410, 410, 410, 410, 415, 416, - 410, 410, 410, 410, 421, 410, 419, 410, - 419, 116, 410, 410, 132, 420, 410, 415, - 416, 410, 410, 410, 410, 421, 410, 419, - 410, 411, 412, 414, 414, 119, 415, 416, - 410, 410, 410, 410, 417, 410, 181, 182, - 183, 184, 483, 344, 81, 187, 188, 342, - 189, 189, 152, 190, 342, 181, 342, 194, - 484, 196, 197, 5, 198, 199, 200, 193, - 193, 37, 201, 193, 193, 181, 193, 204, - 182, 183, 184, 485, 486, 81, 487, 488, - 193, 189, 189, 152, 489, 193, 204, 193, - 113, 80, 80, 81, 198, 199, 193, 193, - 193, 152, 490, 193, 491, 2, 342, 342, - 342, 408, 342, 187, 188, 342, 342, 342, - 342, 347, 342, 491, 342, 492, 349, 493, - 494, 81, 487, 488, 193, 193, 193, 153, - 352, 193, 193, 491, 193, 495, 349, 354, - 354, 81, 487, 488, 193, 193, 193, 193, - 352, 193, 349, 354, 354, 81, 487, 488, - 193, 193, 193, 193, 352, 193, 496, 193, - 193, 193, 488, 193, 488, 193, 243, 193, - 492, 349, 354, 354, 81, 487, 488, 193, - 193, 193, 193, 352, 193, 492, 349, 493, - 354, 81, 487, 488, 193, 193, 193, 153, - 352, 193, 204, 193, 266, 113, 497, 497, - 155, 198, 199, 193, 193, 193, 193, 490, - 193, 204, 193, 498, 179, 499, 500, 157, - 487, 488, 193, 193, 193, 193, 501, 193, - 179, 499, 500, 157, 487, 488, 193, 193, - 193, 193, 501, 193, 499, 499, 157, 487, - 488, 193, 193, 193, 193, 501, 193, 502, - 176, 503, 504, 160, 487, 488, 193, 193, - 193, 193, 501, 193, 176, 503, 504, 160, - 487, 488, 193, 193, 193, 193, 501, 193, - 503, 503, 160, 487, 488, 193, 193, 193, - 193, 501, 193, 505, 173, 506, 507, 163, - 487, 488, 193, 193, 193, 193, 501, 193, - 173, 506, 507, 163, 487, 488, 193, 193, - 193, 193, 501, 193, 506, 506, 163, 487, - 488, 193, 193, 193, 193, 501, 193, 508, - 170, 193, 509, 193, 487, 488, 193, 193, - 193, 193, 501, 193, 170, 193, 509, 193, - 487, 488, 193, 193, 193, 193, 501, 193, - 487, 488, 193, 193, 193, 193, 501, 193, - 510, 193, 511, 512, 193, 487, 488, 193, - 193, 193, 167, 193, 193, 193, 165, 193, - 166, 193, 193, 193, 193, 487, 488, 193, - 487, 488, 193, 510, 193, 193, 193, 193, - 487, 488, 193, 510, 193, 511, 193, 193, - 487, 488, 193, 193, 193, 167, 193, 491, - 166, 342, 342, 95, 346, 342, 187, 188, - 342, 342, 342, 342, 347, 342, 491, 342, - 0 -}; - -static const short _indic_syllable_machine_trans_targs[] = { - 170, 195, 197, 198, 3, 201, 4, 6, - 204, 7, 9, 207, 10, 12, 210, 13, - 15, 16, 191, 18, 19, 209, 21, 22, - 206, 24, 25, 203, 212, 216, 220, 223, - 227, 230, 234, 237, 241, 244, 170, 270, - 272, 273, 39, 276, 40, 42, 279, 43, - 45, 282, 46, 48, 285, 49, 51, 52, - 266, 54, 55, 284, 57, 58, 281, 60, - 61, 278, 287, 290, 294, 297, 301, 304, - 308, 311, 315, 319, 170, 343, 345, 346, - 75, 349, 170, 76, 78, 352, 79, 81, - 355, 82, 84, 358, 85, 87, 88, 339, - 90, 91, 357, 93, 94, 354, 96, 97, - 351, 360, 363, 367, 370, 374, 377, 381, - 384, 388, 170, 418, 420, 421, 110, 424, - 111, 113, 427, 114, 116, 430, 117, 119, - 433, 120, 122, 123, 414, 125, 126, 432, - 128, 129, 429, 131, 132, 426, 435, 438, - 442, 445, 449, 452, 456, 459, 463, 466, - 392, 478, 146, 481, 148, 484, 149, 151, - 487, 152, 154, 490, 155, 493, 495, 496, - 159, 160, 492, 162, 163, 489, 165, 166, - 486, 168, 169, 483, 170, 171, 246, 320, - 322, 391, 393, 340, 342, 394, 390, 467, - 468, 170, 172, 174, 35, 245, 192, 194, - 214, 243, 173, 34, 175, 239, 0, 176, - 178, 33, 238, 236, 177, 32, 179, 232, - 180, 182, 31, 231, 229, 181, 30, 183, - 225, 184, 186, 29, 224, 222, 185, 28, - 187, 218, 188, 190, 27, 217, 215, 189, - 26, 200, 193, 170, 196, 1, 199, 2, - 202, 5, 23, 205, 8, 20, 208, 11, - 17, 211, 14, 213, 219, 221, 226, 228, - 233, 235, 240, 242, 170, 247, 249, 71, - 317, 267, 269, 318, 248, 70, 250, 313, - 36, 251, 253, 69, 312, 310, 252, 68, - 254, 306, 255, 257, 67, 305, 303, 256, - 66, 258, 299, 259, 261, 65, 298, 296, - 260, 64, 262, 292, 263, 265, 63, 291, - 289, 264, 62, 275, 268, 170, 271, 37, - 274, 38, 277, 41, 59, 280, 44, 56, - 283, 47, 53, 286, 50, 288, 293, 295, - 300, 302, 307, 309, 314, 316, 170, 321, - 106, 323, 386, 72, 324, 326, 105, 385, - 383, 325, 104, 327, 379, 328, 330, 103, - 378, 376, 329, 102, 331, 372, 332, 334, - 101, 371, 369, 333, 100, 335, 365, 336, - 338, 99, 364, 362, 337, 98, 348, 341, - 170, 344, 73, 347, 74, 350, 77, 95, - 353, 80, 92, 356, 83, 89, 359, 86, - 361, 366, 368, 373, 375, 380, 382, 387, - 389, 170, 170, 395, 397, 142, 141, 415, - 417, 465, 396, 398, 461, 107, 399, 401, - 140, 460, 458, 400, 139, 402, 454, 403, - 405, 138, 453, 451, 404, 137, 406, 447, - 407, 409, 136, 446, 444, 408, 135, 410, - 440, 411, 413, 134, 439, 437, 412, 133, - 423, 416, 170, 419, 108, 422, 109, 425, - 112, 130, 428, 115, 127, 431, 118, 124, - 434, 121, 436, 441, 443, 448, 450, 455, - 457, 462, 464, 143, 469, 470, 480, 475, - 477, 498, 471, 472, 473, 144, 479, 474, - 476, 145, 482, 147, 167, 156, 485, 150, - 164, 488, 153, 161, 491, 158, 494, 157, - 497 -}; - -static const char _indic_syllable_machine_trans_actions[] = { - 1, 2, 0, 0, 0, 2, 0, 0, - 2, 0, 0, 2, 0, 0, 2, 0, - 0, 0, 2, 0, 0, 2, 0, 0, - 2, 0, 0, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 3, 2, - 0, 0, 0, 2, 0, 0, 2, 0, - 0, 2, 0, 0, 2, 0, 0, 0, - 2, 0, 0, 2, 0, 0, 2, 0, - 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 4, 2, 0, 0, - 0, 2, 5, 0, 0, 2, 0, 0, - 2, 0, 0, 2, 0, 0, 0, 2, - 0, 0, 2, 0, 0, 2, 0, 0, - 2, 2, 6, 2, 6, 2, 6, 2, - 6, 2, 7, 2, 0, 0, 0, 2, - 0, 0, 2, 0, 0, 2, 0, 0, - 2, 0, 0, 0, 2, 0, 0, 2, - 0, 0, 2, 0, 0, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 6, 8, 0, 2, 0, 2, 0, 0, - 2, 0, 0, 2, 0, 2, 0, 0, - 0, 0, 2, 0, 0, 2, 0, 0, - 2, 0, 0, 2, 11, 2, 2, 6, - 2, 12, 12, 0, 0, 2, 2, 6, - 2, 13, 2, 2, 0, 2, 0, 0, - 2, 2, 2, 0, 2, 2, 0, 2, - 2, 0, 2, 2, 2, 0, 2, 2, - 2, 2, 0, 2, 2, 2, 0, 2, - 2, 2, 2, 0, 2, 2, 2, 0, - 2, 2, 2, 2, 0, 2, 2, 2, - 0, 2, 0, 14, 0, 0, 2, 0, - 2, 0, 0, 2, 0, 0, 2, 0, - 0, 2, 0, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 15, 2, 2, 0, - 2, 0, 0, 2, 2, 0, 2, 2, - 0, 2, 2, 0, 2, 2, 2, 0, - 2, 2, 2, 2, 0, 2, 2, 2, - 0, 2, 2, 2, 2, 0, 2, 2, - 2, 0, 2, 2, 2, 2, 0, 2, - 2, 2, 0, 2, 0, 16, 0, 0, - 2, 0, 2, 0, 0, 2, 0, 0, - 2, 0, 0, 2, 0, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 17, 6, - 0, 6, 6, 0, 6, 2, 0, 6, - 2, 6, 0, 6, 6, 6, 2, 0, - 6, 2, 6, 0, 6, 6, 6, 2, - 0, 6, 2, 6, 0, 6, 6, 6, - 2, 0, 6, 2, 6, 0, 6, 0, - 18, 0, 0, 2, 0, 2, 0, 0, - 2, 0, 0, 2, 0, 0, 2, 0, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 19, 20, 2, 2, 0, 0, 0, - 0, 2, 2, 2, 2, 0, 2, 2, - 0, 2, 2, 2, 0, 2, 2, 2, - 2, 0, 2, 2, 2, 0, 2, 2, - 2, 2, 0, 2, 2, 2, 0, 2, - 2, 2, 2, 0, 2, 2, 2, 0, - 2, 0, 21, 0, 0, 2, 0, 2, - 0, 0, 2, 0, 0, 2, 0, 0, - 2, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 8, 2, 0, - 0, 2, 2, 8, 8, 0, 8, 8, - 0, 0, 2, 0, 0, 0, 2, 0, - 0, 2, 0, 0, 2, 0, 0, 0, - 2 -}; - -static const char _indic_syllable_machine_to_state_actions[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0 -}; - -static const char _indic_syllable_machine_from_state_actions[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0 -}; - -static const short _indic_syllable_machine_eof_trans[] = { - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 77, 77, 77, 83, 83, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 83, 77, 77, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 77, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, - 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 410, - 343, 410, 411, 411, 411, 411, 411, 411, - 411, 411, 411, 411, 411, 411, 411, 411, - 411, 411, 411, 411, 411, 411, 411, 411, - 411, 411, 411, 411, 411, 411, 411, 411, - 411, 411, 411, 411, 411, 411, 411, 411, - 411, 411, 411, 411, 411, 411, 411, 411, - 411, 411, 411, 411, 411, 411, 411, 411, - 411, 411, 411, 411, 411, 411, 411, 411, - 411, 411, 411, 411, 411, 411, 411, 411, - 411, 411, 411, 343, 194, 194, 194, 343, - 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 343 -}; - -static const int indic_syllable_machine_start = 170; -static const int indic_syllable_machine_first_final = 170; -static const int indic_syllable_machine_error = -1; - -static const int indic_syllable_machine_en_main = 170; - - -#line 36 "../../src/hb-ot-shape-complex-indic-machine.rl" - - - -#line 91 "../../src/hb-ot-shape-complex-indic-machine.rl" - - -#define found_syllable(syllable_type) \ - HB_STMT_START { \ - if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #syllable_type); \ - for (unsigned int i = last; i < p+1; i++) \ - info[i].syllable() = (syllable_serial << 4) | syllable_type; \ - last = p+1; \ - syllable_serial++; \ - if (unlikely (syllable_serial == 16)) syllable_serial = 1; \ - } HB_STMT_END - -static void -find_syllables (hb_buffer_t *buffer) -{ - unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED; - int cs; - hb_glyph_info_t *info = buffer->info; - -#line 1273 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp" - { - cs = indic_syllable_machine_start; - ts = 0; - te = 0; - act = 0; - } - -#line 112 "../../src/hb-ot-shape-complex-indic-machine.rl" - - - p = 0; - pe = eof = buffer->len; - - unsigned int last = 0; - unsigned int syllable_serial = 1; - -#line 1290 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp" - { - int _slen; - int _trans; - const unsigned char *_keys; - const short *_inds; - if ( p == pe ) - goto _test_eof; -_resume: - switch ( _indic_syllable_machine_from_state_actions[cs] ) { - case 10: -#line 1 "NONE" - {ts = p;} - break; -#line 1304 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp" - } - - _keys = _indic_syllable_machine_trans_keys + (cs<<1); - _inds = _indic_syllable_machine_indicies + _indic_syllable_machine_index_offsets[cs]; - - _slen = _indic_syllable_machine_key_spans[cs]; - _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].indic_category()) && - ( info[p].indic_category()) <= _keys[1] ? - ( info[p].indic_category()) - _keys[0] : _slen ]; - -_eof_trans: - cs = _indic_syllable_machine_trans_targs[_trans]; - - if ( _indic_syllable_machine_trans_actions[_trans] == 0 ) - goto _again; - - switch ( _indic_syllable_machine_trans_actions[_trans] ) { - case 2: -#line 1 "NONE" - {te = p+1;} - break; - case 14: -#line 83 "../../src/hb-ot-shape-complex-indic-machine.rl" - {te = p+1;{ found_syllable (consonant_syllable); }} - break; - case 16: -#line 84 "../../src/hb-ot-shape-complex-indic-machine.rl" - {te = p+1;{ found_syllable (vowel_syllable); }} - break; - case 21: -#line 85 "../../src/hb-ot-shape-complex-indic-machine.rl" - {te = p+1;{ found_syllable (standalone_cluster); }} - break; - case 18: -#line 86 "../../src/hb-ot-shape-complex-indic-machine.rl" - {te = p+1;{ found_syllable (broken_cluster); }} - break; - case 11: -#line 87 "../../src/hb-ot-shape-complex-indic-machine.rl" - {te = p+1;{ found_syllable (non_indic_cluster); }} - break; - case 13: -#line 83 "../../src/hb-ot-shape-complex-indic-machine.rl" - {te = p;p--;{ found_syllable (consonant_syllable); }} - break; - case 15: -#line 84 "../../src/hb-ot-shape-complex-indic-machine.rl" - {te = p;p--;{ found_syllable (vowel_syllable); }} - break; - case 20: -#line 85 "../../src/hb-ot-shape-complex-indic-machine.rl" - {te = p;p--;{ found_syllable (standalone_cluster); }} - break; - case 17: -#line 86 "../../src/hb-ot-shape-complex-indic-machine.rl" - {te = p;p--;{ found_syllable (broken_cluster); }} - break; - case 19: -#line 87 "../../src/hb-ot-shape-complex-indic-machine.rl" - {te = p;p--;{ found_syllable (non_indic_cluster); }} - break; - case 1: -#line 83 "../../src/hb-ot-shape-complex-indic-machine.rl" - {{p = ((te))-1;}{ found_syllable (consonant_syllable); }} - break; - case 3: -#line 84 "../../src/hb-ot-shape-complex-indic-machine.rl" - {{p = ((te))-1;}{ found_syllable (vowel_syllable); }} - break; - case 7: -#line 85 "../../src/hb-ot-shape-complex-indic-machine.rl" - {{p = ((te))-1;}{ found_syllable (standalone_cluster); }} - break; - case 4: -#line 86 "../../src/hb-ot-shape-complex-indic-machine.rl" - {{p = ((te))-1;}{ found_syllable (broken_cluster); }} - break; - case 5: -#line 1 "NONE" - { switch( act ) { - case 1: - {{p = ((te))-1;} found_syllable (consonant_syllable); } - break; - case 4: - {{p = ((te))-1;} found_syllable (broken_cluster); } - break; - case 5: - {{p = ((te))-1;} found_syllable (non_indic_cluster); } - break; - } - } - break; - case 8: -#line 1 "NONE" - {te = p+1;} -#line 83 "../../src/hb-ot-shape-complex-indic-machine.rl" - {act = 1;} - break; - case 6: -#line 1 "NONE" - {te = p+1;} -#line 86 "../../src/hb-ot-shape-complex-indic-machine.rl" - {act = 4;} - break; - case 12: -#line 1 "NONE" - {te = p+1;} -#line 87 "../../src/hb-ot-shape-complex-indic-machine.rl" - {act = 5;} - break; -#line 1415 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp" - } - -_again: - switch ( _indic_syllable_machine_to_state_actions[cs] ) { - case 9: -#line 1 "NONE" - {ts = 0;} - break; -#line 1424 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp" - } - - if ( ++p != pe ) - goto _resume; - _test_eof: {} - if ( p == eof ) - { - if ( _indic_syllable_machine_eof_trans[cs] > 0 ) { - _trans = _indic_syllable_machine_eof_trans[cs] - 1; - goto _eof_trans; - } - } - - } - -#line 121 "../../src/hb-ot-shape-complex-indic-machine.rl" - -} - -#endif /* HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH */ diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22-PATCHES/ChangeLog b/Build/source/libs/harfbuzz/harfbuzz-0.9.23-PATCHES/ChangeLog index 0e6d7f29c6d..63270d083d0 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22-PATCHES/ChangeLog +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23-PATCHES/ChangeLog @@ -1,3 +1,8 @@ +2013-10-29 Peter Breitenlohner <peb@mppmu.mpg.de> + + Imported harfbuzz-0.9.23 source tree from: + http://www.freedesktop.org/software/harfbuzz/release/ + 2013-10-04 Peter Breitenlohner <peb@mppmu.mpg.de> Imported harfbuzz-0.9.22 source tree from: diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22-PATCHES/TL-Changes b/Build/source/libs/harfbuzz/harfbuzz-0.9.23-PATCHES/TL-Changes index dfbe753b014..6d0cac49098 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22-PATCHES/TL-Changes +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23-PATCHES/TL-Changes @@ -1,5 +1,5 @@ -Changes applied to the harfbuzz-0.9.22/ tree as obtained from: - http://www.freedesktop.org/software/harfbuzz/release/harfbuzz-0.9.22.tar.bz2 +Changes applied to the harfbuzz-0.9.23/ tree as obtained from: + http://www.freedesktop.org/software/harfbuzz/release/harfbuzz-0.9.23.tar.bz2 Removed: COPYING diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/AUTHORS b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/AUTHORS index c611d7d4769..c611d7d4769 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/AUTHORS +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/AUTHORS diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/Android.mk b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/Android.mk index 757d136e509..757d136e509 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/Android.mk +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/Android.mk diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/ChangeLog b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/ChangeLog index a08344752ba..3aeb416a11b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/ChangeLog +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/ChangeLog @@ -1,3 +1,1082 @@ +commit dce79c2bd747d398bdf2f4b171b0ba9b5b951f72 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 28 20:26:40 2013 +0100 + + 0.9.23 + + NEWS | 10 ++++++++++ + configure.ac | 2 +- + 2 files changed, 11 insertions(+), 1 deletion(-) + +commit 2e990a3d722c10d1eefdc4c5ccbdaa384625c3fd +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 28 20:23:07 2013 +0100 + + Make "make distcheck" happy + + configure.ac | 2 +- + test/shaping/Makefile.am | 3 +++ + 2 files changed, 4 insertions(+), 1 deletion(-) + +commit 6ffc007b61402c9d1d4de368deed4971a10ed00b +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 28 19:26:02 2013 +0100 + + [otlayout] Optimize inplace + + See thread started by Jonathan with subject "an optimization for + complex + fonts". + + src/hb-ot-layout.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 71b4c999a511bf018acaf48a45e070470c0daf12 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 28 00:20:59 2013 +0100 + + Revert "Zero marks by GDEF for Tibetan" + + This reverts commit d5bd0590ae2fbc7b0dee86385a565aef00ffb835. + + The reasoning behind that logic was flawed and made under + a misunderstanding of the original problem, and caused + regressions as reported by Jonathan Kew in thread titled + "tibetan marks" in Oct 2013. Apparently I have had fixed + the original problem with this commit: + + 7e08f1258da229dfaf7e1c4b5c41e5bb83906cb0 + + So, revert the faulty commit and everything seems to be in good + shape. + + src/hb-ot-layout-gsubgpos-private.hh | 4 ++-- + src/hb-ot-shape-complex-arabic.cc | 10 +++------- + src/hb-ot-shape-complex-default.cc | 17 +---------------- + src/hb-ot-shape-complex-indic.cc | 8 +------- + src/hb-ot-shape-complex-myanmar.cc | 15 +++++---------- + src/hb-ot-shape-complex-private.hh | 8 ++------ + src/hb-ot-shape-complex-sea.cc | 14 ++++---------- + src/hb-ot-shape-complex-thai.cc | 9 +-------- + src/hb-ot-shape.cc | 4 ++-- + 9 files changed, 21 insertions(+), 68 deletions(-) + +commit 9596b2bf569dae6fbe268803e3cb248001f10954 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 28 00:09:05 2013 +0100 + + Pass CPPFLAGS=-Werror to Travis-CI + + We want default gcc / clang warnings to fail the CI build. + + .travis.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c77d1ade6898cea161f0709c5c5a912e14aff951 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Sun Oct 27 23:52:26 2013 +0100 + + Fix warnings + + test/api/test-blob.c | 2 +- + util/helper-cairo-ansi.cc | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit c2bc818706df56022c8bb922df2b741cb120f7e4 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Sun Oct 27 23:36:35 2013 +0100 + + Work with old and new glib + + Avoids "deprecated" warnings. + + src/test-buffer-serialize.cc | 7 +++++-- + src/test-size-params.cc | 7 +++++-- + src/test-would-substitute.cc | 7 +++++-- + src/test.cc | 7 +++++-- + util/options.cc | 4 ++-- + util/options.hh | 4 ++++ + util/view-cairo.hh | 4 ++++ + 7 files changed, 30 insertions(+), 10 deletions(-) + +commit 46a863d91dbcc9a4c796e3715ea3828939f4d941 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Sun Oct 27 23:24:50 2013 +0100 + + [indic] Adjust pref reordering logic + + For Javanese (pref_len == 1) only reorder if it didn't ligate. That's + sensible, and what the spec says. For other Indic (pref_len > 1) + only reorder if ligated. + + Doesn't change any test numbers. + + src/hb-ot-shape-complex-indic.cc | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +commit 6b03e3c724ec6cd255f4a323bf4aa7d8c93a056e +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Sun Oct 27 21:04:55 2013 +0100 + + Optimize fallback kerning + + Patch from Jonathan Kew. "These changes seem to yield a small but + just-about-measurable improvement with old fonts that lack GPOS + kerning." + + src/hb-ot-shape-fallback.cc | 47 + ++++++++++++++++++++++++++++----------------- + 1 file changed, 29 insertions(+), 18 deletions(-) + +commit 133eeba6a32769ec1a7520e7c8a0d2eb1ad986f8 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Sun Oct 27 00:24:59 2013 +0200 + + Minor + + See: + https://github.com/prezi/harfbuzz-js/pull/1/files#r7032397 + + src/hb-common.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a74f0de225c403998212e2618dcf9452bc5b590d +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 24 11:46:33 2013 +0200 + + [indic] Fix CM2, really + + Followup from 6e613f3365bf4e9fd778758c53e7de00c64beca1. + + src/hb-ot-shape-complex-indic-machine.rl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6e613f3365bf4e9fd778758c53e7de00c64beca1 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 23 23:34:13 2013 +0200 + + Fix "shift count >= width of type" issue + + src/hb-ot-shape-complex-indic-private.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ac8cd511911c7dca6222d14fa758bff75d601567 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 19:33:09 2013 +0200 + + Refactor + + src/hb-ot-layout-gpos-table.hh | 120 + ++++++++++++++++++++++------------------- + src/hb-ot-layout.cc | 31 +++++------ + src/hb-ot-shape-normalize.cc | 29 +++++----- + src/hb-ot-shape.cc | 82 ++++++++++++++++------------ + 4 files changed, 145 insertions(+), 117 deletions(-) + +commit 0f3fe37fccfb540437adf13dd580f2c5164a0b1f +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 19:14:22 2013 +0200 + + Comment + + src/hb-ot-layout-private.hh | 1 + + 1 file changed, 1 insertion(+) + +commit ddce2d8df6fed9c033f1f13e235666680c5beb67 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 18:07:11 2013 +0200 + + [indic] Improve positioning of post-base bells and whistles + + Bug 58714 - Kannada u+0cb0 u+200d u+0ccd u+0c95 u+0cbe does not + provide + same results as Windows8 + https://bugs.freedesktop.org/show_bug.cgi?id=58714 + + Test with U+0CB0,U+200D,U+0CCD,U+0C95,U+0CBF and tunga.ttf. + + Improves some scripts. Improves Bengali too, but numbers + are up because we produce better results than Uniscribe for some + sequences now. + + New numbers: + BENGALI: 353724 out of 354188 tests passed. 464 failed (0.131004%) + DEVANAGARI: 707307 out of 707394 tests passed. 87 failed (0.0122987%) + GUJARATI: 366349 out of 366457 tests passed. 108 failed (0.0294714%) + GURMUKHI: 60732 out of 60747 tests passed. 15 failed (0.0246926%) + KANNADA: 951190 out of 951913 tests passed. 723 failed (0.0759523%) + KHMER: 299070 out of 299124 tests passed. 54 failed (0.0180527%) + MALAYALAM: 1048140 out of 1048334 tests passed. 194 failed + (0.0185056%) + ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%) + SINHALA: 271662 out of 271847 tests passed. 185 failed (0.068053%) + TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%) + TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%) + + src/hb-ot-shape-complex-indic.cc | 19 ++++++++++--------- + 1 file changed, 10 insertions(+), 9 deletions(-) + +commit d5bd0590ae2fbc7b0dee86385a565aef00ffb835 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 16:44:54 2013 +0200 + + Zero marks by GDEF for Tibetan + + See: + http://lists.freedesktop.org/archives/harfbuzz/2013-April/003101.html + + src/hb-ot-layout-gsubgpos-private.hh | 4 ++-- + src/hb-ot-shape-complex-arabic.cc | 10 +++++++--- + src/hb-ot-shape-complex-default.cc | 17 ++++++++++++++++- + src/hb-ot-shape-complex-indic.cc | 8 +++++++- + src/hb-ot-shape-complex-myanmar.cc | 15 ++++++++++----- + src/hb-ot-shape-complex-private.hh | 8 ++++++-- + src/hb-ot-shape-complex-sea.cc | 14 ++++++++++---- + src/hb-ot-shape-complex-thai.cc | 9 ++++++++- + src/hb-ot-shape.cc | 4 ++-- + 9 files changed, 68 insertions(+), 21 deletions(-) + +commit bf029281b1b0f854f671969ab40eac3046a111bd +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 16:20:13 2013 +0200 + + Bug 65258 - [...] Mongolian with free variation selector + + src/hb-ot-shape-complex-arabic.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 0193649ce4ca78b8e2835a50bd51ee594cffe34e +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 16:08:53 2013 +0200 + + [otfallback] Don't shift down above-marks too much + + This seems to generate much better, almost-perfect, positioning for + Arabic as well as Latin above marks. + + src/hb-ot-shape-fallback.cc | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +commit dba9580237da788275b1ab5fe6be75c8a3f359b9 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 15:57:36 2013 +0200 + + [otfallback] Never fallback-position a below-mark upwards + + Test with WinXP times.ttf and U+05D9,U+05B5. + + src/hb-ot-shape-fallback.cc | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 8177da29ad07d8fa444ce07003fa65cd31a2776b +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 15:50:29 2013 +0200 + + Minor + + src/hb-ot-shape-fallback.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit c16012e9019ec59c2200a3cc29b8a37ea70eda70 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 02:27:00 2013 +0200 + + [indic] Add Javanese support! + + Seems to be working just fine! + + src/hb-ot-shape-complex-indic-machine.rl | 14 ++++++------ + src/hb-ot-shape-complex-indic-private.hh | 37 + ++++++++++++++++---------------- + src/hb-ot-shape-complex-indic.cc | 9 ++++++-- + 3 files changed, 34 insertions(+), 26 deletions(-) + +commit 755b44cce6dc23376a3cf0212893609231fa4967 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 11:17:42 2013 +0200 + + [ft] Round metrics instead of truncate + + Lohit-Punjabi has a upem of 769! We were losing one unit in our + code, and FreeType is losing another one... Test with U+0A06. + Has an advance of 854 in the font. We were producing 852. + Now we do 853, which is what FreeType is telling us. + + src/hb-ft.cc | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 9a49351cc2625de16a73e0e153d3097ef6c7cc0f +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 02:14:53 2013 +0200 + + [indic] Swith pref logic to use _hb_glyph_info_substituted() + + See comments from caveat! Seems to work fine. + + This is useful for Javanese which has an atomically encoded pre-base + reordering Ra which should only be reordered if it was substituted + by the pref feature. + + src/hb-ot-shape-complex-indic.cc | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit f175aa33c5e94397c60648ac0697c80f5fe0dcb7 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 02:07:44 2013 +0200 + + [indic] Fix compiler warnings + + src/hb-ot-shape-complex-indic.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 857027341423f15fd6084c7563cc355b06e7cbdd +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 01:11:05 2013 +0200 + + [otlayout] Add _hb_glyph_info_substituted() + + Currently unused. + + src/hb-ot-layout-private.hh | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit a1f7b2856184959e965c9c2b80363f9f46d486a7 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 01:09:08 2013 +0200 + + [otlayout] Switch over from old is_a_ligature() to IS_LIGATED + + Impact should be minimal and positive. + + src/hb-ot-layout-gsubgpos-private.hh | 2 +- + src/hb-ot-layout-private.hh | 12 +++++++++--- + src/hb-ot-shape-complex-indic.cc | 4 ++-- + src/hb-ot-shape-complex-myanmar.cc | 2 +- + src/hb-ot-shape.cc | 2 +- + 5 files changed, 14 insertions(+), 8 deletions(-) + +commit 09675a8115b9d77261c33940401aa919cede8662 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 01:05:58 2013 +0200 + + [otlayout] Add HB_OT_LAYOUT_GLYPH_PROPS_LIGATED + + Currently unused. + + src/hb-ot-layout-gsubgpos-private.hh | 15 ++++++++++----- + src/hb-ot-layout-private.hh | 5 ++++- + 2 files changed, 14 insertions(+), 6 deletions(-) + +commit 05ad6b50ac0a1b9a8da10d2ee2238068b7811e7d +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 00:45:59 2013 +0200 + + [otlayout] Add HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED + + Currently unused. + + src/hb-ot-layout-gsubgpos-private.hh | 5 +++-- + src/hb-ot-layout-private.hh | 10 ++++++---- + 2 files changed, 9 insertions(+), 6 deletions(-) + +commit 101303dbf7cf15d044bf2518f14b3aec65970fea +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 00:42:39 2013 +0200 + + [otlayout] More shuffling around + + src/hb-ot-layout-gpos-table.hh | 16 +++---- + src/hb-ot-layout-gsub-table.hh | 13 +++-- + src/hb-ot-layout-gsubgpos-private.hh | 8 ++-- + src/hb-ot-layout-private.hh | 92 + ++++++++++++++++++++++++++++++++---- + src/hb-ot-shape.cc | 8 ++-- + 5 files changed, 102 insertions(+), 35 deletions(-) + +commit 91689de2603e4151e2a2d3a3852c61667f0c6264 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 00:21:59 2013 +0200 + + [otlayout] Add _hb_glyph_info_set_glyph_props() + + No functional change. + + src/hb-ot-layout-gsub-table.hh | 2 +- + src/hb-ot-layout-gsubgpos-private.hh | 4 ++-- + src/hb-ot-layout-private.hh | 9 +++++++++ + src/hb-ot-shape.cc | 8 +++++--- + 4 files changed, 17 insertions(+), 6 deletions(-) + +commit a0161746589934e93c3b115814bbd81f56ab962f +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 00:06:30 2013 +0200 + + [otlayout] Simplify set_class() usage + + src/hb-ot-layout-gsubgpos-private.hh | 31 ++++++++++++++++++------------- + 1 file changed, 18 insertions(+), 13 deletions(-) + +commit 3ddf892b5328b74afb6e7d9da727d8771ca5d288 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 18 00:02:43 2013 +0200 + + [otlayout] Renaming + + src/hb-ot-layout-gpos-table.hh | 18 +++++++------- + src/hb-ot-layout-gsub-table.hh | 2 +- + src/hb-ot-layout-gsubgpos-private.hh | 36 +++++++++++++-------------- + src/hb-ot-layout-private.hh | 48 + +++++++++++++++++++++--------------- + src/hb-ot-shape-complex-indic.cc | 5 ++-- + src/hb-ot-shape-complex-myanmar.cc | 2 +- + src/hb-ot-shape-fallback.cc | 8 +++--- + src/hb-ot-shape.cc | 2 +- + 8 files changed, 65 insertions(+), 56 deletions(-) + +commit 2e96d2c6ee34142375373be07217c9953e7822cc +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 21:16:20 2013 +0200 + + [otlayout] More shuffling + + src/hb-ot-layout-private.hh | 252 + +++++++++++++++++++++++--------------------- + 1 file changed, 130 insertions(+), 122 deletions(-) + +commit 469524692bd0a258b28e63294c984e677a9c2477 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 21:01:57 2013 +0200 + + [otlayout] Code shuffling + + src/hb-ot-layout-private.hh | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +commit 11fb16cb849285a178d9e80991b1d60a960326ee +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 20:57:57 2013 +0200 + + Use unsigned enums for mask types + + src/hb-buffer.h | 16 ++++++++-------- + src/hb-ot-layout-private.hh | 8 ++++---- + 2 files changed, 12 insertions(+), 12 deletions(-) + +commit 03058c3d1e8c18858c1e0b0c738ce9d299f2787a +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 20:55:34 2013 +0200 + + [otlayout] Remove two unused HB_OT_LAYOUT_GLYPH_PROPS_* values + + src/hb-ot-layout-gdef-table.hh | 1 - + src/hb-ot-layout-gsub-table.hh | 3 ++- + src/hb-ot-layout-private.hh | 7 +++++-- + 3 files changed, 7 insertions(+), 4 deletions(-) + +commit 941b6992042e7b73b3a2aab1448383adf33bef28 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 20:47:33 2013 +0200 + + [otlayout] Remove unused HB_OT_LAYOUT_GLYPH_PROPS_UNCLASSIFIED + + src/hb-ot-layout-gdef-table.hh | 7 +++++-- + src/hb-ot-layout-private.hh | 10 ++++------ + 2 files changed, 9 insertions(+), 8 deletions(-) + +commit 8f9ec92dfce5c469fb85ad301296b5dde1b2ab0a +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 19:52:47 2013 +0200 + + [indic] Adjust Javanese base algorithm + + src/hb-ot-shape-complex-indic.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 49901862e36e1c153835877a9f1183729333bbbe +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 19:48:51 2013 +0200 + + [otlayout] Guard against use of ReverseChain through Context + + src/hb-ot-layout-gsub-table.hh | 4 +++- + src/hb-ot-layout.cc | 4 ++-- + 2 files changed, 5 insertions(+), 3 deletions(-) + +commit 74f4bbf0560a5fd2d295e100e96f0c6c7033e852 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 19:07:53 2013 +0200 + + [indic] Towards supporting atomicly-encoded prebase-reorderings + + src/hb-ot-shape-complex-indic.cc | 65 + ++++++++++++++++++++++++---------------- + 1 file changed, 40 insertions(+), 25 deletions(-) + +commit efed40b975110d78c9c505441e7e17a8c13e85c8 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 18:50:11 2013 +0200 + + [indic] Minor refactoring of reph handling + + src/hb-ot-shape-complex-indic.cc | 14 ++++++++------ + src/hb-ot-shape-complex-sea.cc | 2 +- + 2 files changed, 9 insertions(+), 7 deletions(-) + +commit 684fe59ff858a0ecba71b3ed80378afb0b8bbb48 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 18:30:06 2013 +0200 + + [indic] Minor refactoring of would_substitute() + + src/hb-ot-shape-complex-indic.cc | 19 ++++++++++--------- + 1 file changed, 10 insertions(+), 9 deletions(-) + +commit 321df83fb4f0b8a5310888129cb70bfda8ae0c96 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 18:16:14 2013 +0200 + + Route Buginese through the SEA shaper + + Both Indic and SEA seem to do it just fine, but SEA is much + simpler. + + src/hb-ot-shape-complex-private.hh | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit b5a0f69e47ace468b06e21cf069a18ddcfcf6064 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 18:04:23 2013 +0200 + + [indic] Pass zero-context=false to would_substitute for newer scripts + + For scripts without an old/new spec distinction, use + zero-context=false. + This changes behavior in Sinhala / Khmer, but doesn't seem to regress. + This will be useful and used in Javanese. + + src/hb-ot-shape-complex-indic.cc | 35 +++++++++++++++++++---------------- + 1 file changed, 19 insertions(+), 16 deletions(-) + +commit c4e71ff36d1f86a6ea56539728a964d97217e2b6 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 17:04:47 2013 +0200 + + [indic] Clean up Khmer and Sinhala base finding algorithm + + src/hb-ot-shape-complex-indic.cc | 24 +++++++++++------------- + 1 file changed, 11 insertions(+), 13 deletions(-) + +commit e10453e6fb2544724ccd7ddfdbb9de90ef9274ce +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 16:49:06 2013 +0200 + + [indic] Add BASE_POS_LAST_SINHALA + + Previously we planted this into the mode used for Khmer. There's not + really much in common between the two, so separate again. + + src/hb-ot-shape-complex-indic.cc | 21 +++++++++++++++++++-- + 1 file changed, 19 insertions(+), 2 deletions(-) + +commit 9ac6b01e0cd8e2d66dfc727157f45b615bc77109 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 16:27:38 2013 +0200 + + [indic] Adjust Sinhala cluster merging under uniscribe + + Similar to 190c8f2b60af0851bf692f653c1604cfbf0561a5 but for + Sinhala. + + src/hb-ot-shape-complex-indic.cc | 23 ++++++++++++++++------- + 1 file changed, 16 insertions(+), 7 deletions(-) + +commit 3c3df9cba13fec2c35e0e7ae587d9699ac0c37f5 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 13:58:31 2013 +0200 + + [otlayout] Minor + + src/hb-ot-layout-gsubgpos-private.hh | 62 + +++++++++++++++++++----------------- + 1 file changed, 33 insertions(+), 29 deletions(-) + +commit 6cc136f7531a45e71ea08a7dc8a2187172cb813d +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 13:55:48 2013 +0200 + + [otlayout] Minor + + src/hb-ot-layout-gsubgpos-private.hh | 14 ++++++-------- + 1 file changed, 6 insertions(+), 8 deletions(-) + +commit ba6ddc421e5e440231c2ece2db1363f8e6d2ecbf +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 13:52:51 2013 +0200 + + [otlayout] Increase MAX_CONTEXT_LENGTH + + It's cheap. + + src/hb-ot-layout-common-private.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e714fe6d6a2633494cb1fa7170a32ca2638cbb51 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 13:49:51 2013 +0200 + + [otlayout] Simplify ligate_input() + + Shouldn't change behavior at all, but is faster / more robust. + + src/hb-ot-layout-gsub-table.hh | 16 +++++++--------- + src/hb-ot-layout-gsubgpos-private.hh | 17 +++++++---------- + 2 files changed, 14 insertions(+), 19 deletions(-) + +commit 6b2abdcd203204131f3017ca85c91de9d43959cd +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 13:15:43 2013 +0200 + + [indic] Improve clusters in presence of reph + + src/hb-ot-shape-complex-indic.cc | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +commit 42d0f55cbc68285e22d713df7062e520af708c82 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 13:05:05 2013 +0200 + + [indic] Apply calt,clig in the same stage as presentation features + + Whic means these twp are applied per-syllable now. Apparently + in some Khmer fonts the clig interacts with presentation features. + + Test case: U+1781,U+17D2,U+1789,U+17BB,U+17C6 with Mondulkiri-R.ttf + should produce one big ligature. + + src/hb-ot-shape-complex-indic.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit ae9a5834df477006686421d494b55a1569789327 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 12:24:55 2013 +0200 + + [indic] Fix pref vs blwf interaction + + If a glyph can be both blwf and pref, we were wrongly sorting it + in the post position instead of below position. + + src/hb-ot-shape-complex-indic.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit c7dacac02cfe8526eaf131ce6c5e7b6df7ca2ccd +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 12:20:24 2013 +0200 + + [indic] Don't apply blwf before base under old-spec mode + + Test case: U+09AC,U+09CD,U+09A6 with Lohit-Bengali 2.5.3. + + src/hb-ot-shape-complex-indic.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit da72042c52ed3cc0ee19d3eabb8db7c7dd34d3ed +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 17 12:01:50 2013 +0200 + + [otlayout] Fix up recent Context matching change + + Commit 6b65a76b40522a4f57a6fedcbdfc5a4d736f1d3c. "end" was becoming + negative. Was trigerred by Lohit-Kannada 2.5.3 and the sequence: + U+0CB0,U+200D,U+0CBE,U+0CB7,U+0CCD,U+0C9F,U+0CCD,U+0CB0,U+0C97,U+0CB3 + Two glyphs were being duplicated. + + src/hb-buffer.cc | 7 ++++++- + src/hb-ot-layout-gsubgpos-private.hh | 3 ++- + 2 files changed, 8 insertions(+), 2 deletions(-) + +commit 1a7de1ba9876b0554c758acbc6459366d9d98a5d +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 16 19:55:06 2013 +0200 + + [indic] Improve Avagraha support in machine + + src/hb-ot-shape-complex-indic-machine.rl | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 3756efaf4e14ec3b5b1def700a1b5985f162372b +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 16 19:06:29 2013 +0200 + + [indic] Misc harmless fixes! + + First, we were abusing OT_VD instead of OT_A. Fix that + but moving OT_A in the grammar where it belongs (which + is different from what the spec says). + + Also, only allow medial consonants after all other + consonants. This doesn't affect any current character. + + Finally, fix Halant attachment in presence of medial + consonants. Again, this currently doesn't affect any + sequence. + + I lied. There's Gurmukhi U+0A75 which is Consonant_Medial. + Uniscribe allows one of those in each of these positions: + before matras, after matras and before syllable modifiers, + and after syllable modifiers! We currently just allow + unlimited numbers of it, before matras. + + src/hb-ot-shape-complex-indic-machine.rl | 8 ++++---- + src/hb-ot-shape-complex-indic-private.hh | 2 +- + src/hb-ot-shape-complex-indic.cc | 11 ++++++----- + 3 files changed, 11 insertions(+), 10 deletions(-) + +commit c52ddab72e025d1bee8274c8f3416208b12f68f1 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 16 13:42:38 2013 +0200 + + [arabic] Make ZWJ prevent ligatures instead of facilitating it + + Unicode 6.2.0 Section 16.2 / Figure 16.3 says: + + "For backward compatibility, between Arabic characters a ZWJ acts just + like the sequence <ZWJ, ZWNJ, ZWJ>, preventing a ligature from forming + instead of requesting the use of a ligature that would not normally be + used. As a result, there is no plain text mechanism for requesting the + use of a ligature in Arabic text." + + As such, we flip internal zwj to zwnj flags for GSUB matching, which + means it will block ligation in all features, unless the font + explicitly matches U+200D glyph. This doesn't affect joining + behavior. + + src/hb-ot-layout-private.hh | 6 ++++++ + src/hb-ot-shape-complex-arabic.cc | 18 ++++++++++++++++++ + 2 files changed, 24 insertions(+) + +commit 1a31f9f820c4538015ddaf4ca2b790649c5997ed +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 16 13:42:18 2013 +0200 + + [otlayout] Minor + + src/hb-ot-layout-private.hh | 23 +++++++++++++++-------- + 1 file changed, 15 insertions(+), 8 deletions(-) + +commit 28d5daec948e1a24f13e492ce301aeb9abff37c8 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 16 12:32:12 2013 +0200 + + [indic] More granular post-base cluster merging! + + src/hb-ot-shape-complex-indic.cc | 45 + ++++++++++++++++++++++++++++++++++------ + 1 file changed, 39 insertions(+), 6 deletions(-) + +commit 9cb59d460e80d769087045535a8d54ec9ed7985c +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 16 11:34:07 2013 +0200 + + [indic] Fix cluster merging of left matras + + The merge_clusters there was totally broken. + + src/hb-ot-shape-complex-indic.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 190c8f2b60af0851bf692f653c1604cfbf0561a5 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 16 11:33:18 2013 +0200 + + [indic] Adjust cluster merging under uniscribe mode for Tamil + + Apparently Uniscribe Tamil shaper doesn't ship chubby clusters + for Tamil. Adjust to that. + + src/hb-ot-shape-complex-indic.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 5c558877da5db8c734ba072f01e5e4797876619c +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 16 11:14:15 2013 +0200 + + [indic] Allow up to two syllable modifiers + + Bug 70509 - Candrabindu+Visarga doesn't work in Devanagari + https://bugs.freedesktop.org/show_bug.cgi?id=70509 + + We categorize both bindus and visarga as syllable-modifiers. + OT spec doesn't actually say what characters go in the syllable + modifier category, and allows one. We just allow up to two now. + + Test case: U+0930,U+0941,U+0901,U+0903 + + Uniscribe currently doesn't support that and produces a + dotted circle. + + src/hb-ot-shape-complex-indic-machine.rl | + 2 +- + .../texts/in-tree/shaper-indic/indic/script-devanagari/misc/misc.txt | + 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +commit f5299eff5c0065d6329cd536c0ac339abea085b0 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 15 18:13:07 2013 +0200 + + [indic] Simplify reph logic + + *Shouldn't* break anything. + + src/hb-ot-shape-complex-indic.cc | 11 +++-------- + 1 file changed, 3 insertions(+), 8 deletions(-) + +commit 65a929b1c033e91919c931b495a775f76b6dcbb3 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 15 18:08:05 2013 +0200 + + [indic] If Malayalam dot-reph formed a ligature, don't move it + + Rachana-0.6 implements dot-reph by ligation, so we shouldn't move it. + Uniscribe doesn't either. Test case: + + U+0D4E,U+0D1A,U+0D4D,U+0D1A,U+0D4D + + src/hb-ot-shape-complex-indic.cc | 23 + ++++++++++++++++------ + .../indic/script-malayalam/misc/dot-reph.txt | 3 +++ + 2 files changed, 20 insertions(+), 6 deletions(-) + +commit a01cbf6cbe0021722302cfb58fb638a0a2427b26 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 15 16:37:53 2013 +0200 + + [indic] Harmless reordering of Khmer features! + + src/hb-ot-shape-complex-indic.cc | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +commit c46f406973024051877e867b93614942ff80c107 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 15 16:24:21 2013 +0200 + + [tests] Remove Myanmar micro-font and test + + .../sha1sum/ceadd106a8205214fbe7337ef9de32a862b59762.ttf | Bin 3040 -> + 0 bytes + test/shaping/tests/context-matching.tests | 1 - + 2 files changed, 1 deletion(-) + +commit eb10233b267909dee0245f126000e117f3b21c35 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 15 15:26:44 2013 +0200 + + [indic] Apply 'kern' for all scripts except for Khmer in Uniscribe + mode + + Seems to better match Uniscribe. + + Note: NotoSansTelugu-Regular has kern feature, so this fixes most + of the + positioning failures there, except for the kern pairs blocked by a + (non-)joiner, in which case we (correctly) kern, but Uniscribe + doesn't. + + src/hb-ot-shape-complex-indic.cc | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +commit 30145272a7d428bc62a903388bd7be43f4da7fc3 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 15 13:47:27 2013 +0200 + + [indic] Don't apply presentation features across syllables + + More like Uniscribe... We still allow user-defined features to + work across syllables, but not pres,blws,abs,psts,etc. + + This "regressed" Sinhala numbers by 11. These are cases were + there's Consonant followed by Ra,Halant,ZWJ at the of text. + The Ra,Halant,ZWJ ends up forming reph, which is wrong... + But before we were also ligating that reph with the previous + consonant. That's even more wrong. That's also what Uniscribe + does. + + Current numbers: + + BENGALI: 353732 out of 354188 tests passed. 456 failed (0.128745%) + DEVANAGARI: 707307 out of 707394 tests passed. 87 failed (0.0122987%) + GUJARATI: 366349 out of 366457 tests passed. 108 failed (0.0294714%) + GURMUKHI: 60732 out of 60747 tests passed. 15 failed (0.0246926%) + KANNADA: 951030 out of 951913 tests passed. 883 failed (0.0927606%) + KHMER: 299070 out of 299124 tests passed. 54 failed (0.0180527%) + MALAYALAM: 1048140 out of 1048334 tests passed. 194 failed + (0.0185056%) + ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%) + SINHALA: 271655 out of 271847 tests passed. 192 failed (0.070628%) + TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%) + TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%) + + src/hb-ot-shape-complex-indic.cc | 21 + +++++++++++++++++---- + .../shaper-indic/indic/script-sinhala/misc/misc.txt | 1 + + 2 files changed, 18 insertions(+), 4 deletions(-) + +commit 3c7b3641cfb00f2c4dcc0768b9854e4f4410d15f +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 15 11:21:01 2013 +0200 + + [indic] Handle Avagraha + + It can come either at the end(ish!) of the syllable, or independently. + When independent, it accepts a few bits and pieces. + + src/hb-ot-shape-complex-indic-machine.rl | 5 ++++- + src/hb-ot-shape-complex-indic-private.hh | 5 +++-- + src/hb-ot-shape-complex-indic.cc | 14 + +++++++++++++- + .../shaper-indic/indic/script-devanagari/misc/misc.txt | 1 + + .../in-tree/shaper-indic/indic/script-telugu/misc/misc.txt | 1 + + 5 files changed, 22 insertions(+), 4 deletions(-) + +commit 5e7432b8172473aa4dda3d51a79add9e97c2d2c1 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 15 12:28:23 2013 +0200 + + [myanmar] Apply abvm/blwm + + src/hb-ot-shape-complex-myanmar.cc | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit 8acbb6be271817c12d2ee0066b355e2fb0f9a934 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 15 12:15:49 2013 +0200 + + [indic] Some scripts like blwf applied to pre-base characters + + ...while some don't! + + Improved Bengali, Devanagari, Gurmukhi, Malayalam. + + Updated numbers: + + BENGALI: 353732 out of 354188 tests passed. 456 failed (0.128745%) + DEVANAGARI: 707307 out of 707394 tests passed. 87 failed (0.0122987%) + GUJARATI: 366349 out of 366457 tests passed. 108 failed (0.0294714%) + GURMUKHI: 60732 out of 60747 tests passed. 15 failed (0.0246926%) + KANNADA: 951030 out of 951913 tests passed. 883 failed (0.0927606%) + KHMER: 299070 out of 299124 tests passed. 54 failed (0.0180527%) + MALAYALAM: 1048134 out of 1048334 tests passed. 200 failed + (0.0190779%) + ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%) + SINHALA: 271666 out of 271847 tests passed. 181 failed (0.0665816%) + TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%) + TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%) + + src/hb-ot-shape-complex-indic.cc | 33 ++++++++++++++++++++------------- + 1 file changed, 20 insertions(+), 13 deletions(-) + +commit 2c85a3df0983f28aed77a0ea3bf2417ef65d4b84 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 14 19:41:52 2013 +0200 + + Fix issue with automake + + test/shaping/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6b65a76b40522a4f57a6fedcbdfc5a4d736f1d3c +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 14 18:51:39 2013 +0200 + + [otlayout] Fix (Chain)Context recursion! + + Previously we only supported recursive sublookups with + ascending indices. We were also not correctly handling + non-1-to-1 recursed lookups. + + Fix all that! + + Fixes the three tests in test/shaping/tests/context-matching.tests, + which were derived from NotoSansBengali and NotoSansDevanagari + among others. + + src/hb-buffer-private.hh | 4 + + src/hb-buffer.cc | 46 ++++++++++ + src/hb-ot-layout-common-private.hh | 1 + + src/hb-ot-layout-gsub-table.hh | 1 + + src/hb-ot-layout-gsubgpos-private.hh | 157 + +++++++++++++++++------------------ + 5 files changed, 127 insertions(+), 82 deletions(-) + +commit 841e20d083aec8d814cd8d90aa6ab60127c0d1f2 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 14 18:47:51 2013 +0200 + + Add test suite for shaping results + + The new test suite runs tests included under + hb/test/shaping/tests/*.tests, which themselves reference + font files stored by sha1sum under hb/test/shaping/fonts/sha1sum. + The fonts are produced using a subsetter to only include glyphs + needed to run the test. + + Four initial tests are added for (Chain)Context matching, + of which three currently fail. + + test/shaping/Makefile.am | 10 +++++- + .../4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf | Bin 0 -> 1320 bytes + .../ceadd106a8205214fbe7337ef9de32a862b59762.ttf | Bin 0 -> 3040 bytes + .../d629e7fedc0b350222d7987345fe61613fa3929a.ttf | Bin 0 -> 1768 bytes + .../f499fbc23865022234775c43503bba2e63978fe1.ttf | Bin 0 -> 3564 bytes + test/shaping/run-tests.sh | 34 + +++++++++++++++++++++ + test/shaping/tests/MANIFEST | 1 + + test/shaping/tests/context-matching.tests | 4 +++ + 8 files changed, 48 insertions(+), 1 deletion(-) + +commit e2dab69291a5d86fc90a8c273c458c16574eafb5 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 14 16:44:44 2013 +0200 + + Minor + + test/shaping/hb_test_tools.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4e6e53db5da0a5da87ae732c3f9d01babf4ae6c2 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 14 13:06:36 2013 +0200 + + [otlayout] "Minor" + + src/hb-ot-layout.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 9326d48e4309901e7e0b0e15230936a21ee3df72 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 10 20:04:42 2013 +0200 + + Don't use g_mapped_file_unref() + + Was introduced in glib 2.22. + + src/test-buffer-serialize.cc | 2 +- + src/test-size-params.cc | 2 +- + src/test-would-substitute.cc | 2 +- + src/test.cc | 2 +- + util/options.cc | 4 ++-- + 5 files changed, 6 insertions(+), 6 deletions(-) + +commit e152d1a27891bd1d9d46a9c028c026843bad384a +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 3 15:09:37 2013 -0400 + + 0.9.22 + + NEWS | 13 +++++++++++++ + configure.ac | 2 +- + 2 files changed, 14 insertions(+), 1 deletion(-) + commit 27674b4bb351e501373bd9994e4ba6546e465cf7 Author: Behdad Esfahbod <behdad@behdad.org> Date: Thu Oct 3 14:54:50 2013 -0400 diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/Makefile.am b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/Makefile.am index 15ccbf87134..15ccbf87134 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/Makefile.am +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/Makefile.am diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/NEWS b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/NEWS index ae4bc2bc089..3636f77086c 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/NEWS +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/NEWS @@ -1,3 +1,13 @@ +Overview of changes leading to 0.9.23 +Monday, October 28, 2013 +===================================== + +- "Udupi HarfBuzz Hackfest", Paris, October 14..18 2013. +- Fix (Chain)Context recursion with non-monotone lookup positions. +- Misc Indic bug fixes. +- New Javanese / Buginese shaping, similar to Windows 8.1. + + Overview of changes leading to 0.9.22 Thursday, October 3, 2013 ===================================== diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/README b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/README index 74e739da52a..74e739da52a 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/README +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/README diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/THANKS b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/THANKS index 940cfde5c39..940cfde5c39 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/THANKS +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/THANKS diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/TODO b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/TODO index e1aa39c4c01..e1aa39c4c01 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/TODO +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/TODO diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/autogen.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/autogen.sh index 6f4e903d745..6f4e903d745 100755 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/autogen.sh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/autogen.sh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/config.h.in b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/config.h.in index 3e906b18416..3e906b18416 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/config.h.in +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/config.h.in diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/configure.ac b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/configure.ac index 17a7fb91f52..d1c40da4d39 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/configure.ac +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/configure.ac @@ -1,6 +1,6 @@ AC_PREREQ([2.64]) AC_INIT([HarfBuzz], - [0.9.22], + [0.9.23], [http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz], [harfbuzz], [http://harfbuzz.org/]) @@ -9,7 +9,7 @@ AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([src/harfbuzz.pc.in]) AC_CONFIG_HEADERS([config.h]) -AM_INIT_AUTOMAKE([1.11.1 gnits dist-bzip2 no-dist-gzip -Wall no-define color-tests -Wno-portability]) +AM_INIT_AUTOMAKE([1.11.1 gnits tar-pax dist-bzip2 no-dist-gzip -Wall no-define color-tests -Wno-portability]) AM_SILENT_RULES([yes]) # Initialize libtool diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/gtk-doc.make b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/gtk-doc.make index 104c3993f3e..9841de47922 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/gtk-doc.make +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/gtk-doc.make @@ -74,40 +74,31 @@ $(REPORT_FILES): sgml-build.stamp #### setup #### -GTK_DOC_V_SETUP=$(GTK_DOC_V_SETUP_$(V)) -GTK_DOC_V_SETUP_=$(GTK_DOC_V_SETUP_$(AM_DEFAULT_VERBOSITY)) -GTK_DOC_V_SETUP_0=@echo " DOC Preparing build"; - setup-build.stamp: - -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ + -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ + echo ' DOC Preparing build'; \ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ test -f $(abs_srcdir)/$$file && \ - cp -pu $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \ + cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \ done; \ fi; \ fi - $(AM_V_at)touch setup-build.stamp + @touch setup-build.stamp #### scan #### -GTK_DOC_V_SCAN=$(GTK_DOC_V_SCAN_$(V)) -GTK_DOC_V_SCAN_=$(GTK_DOC_V_SCAN_$(AM_DEFAULT_VERBOSITY)) -GTK_DOC_V_SCAN_0=@echo " DOC Scanning header files"; - -GTK_DOC_V_INTROSPECT=$(GTK_DOC_V_INTROSPECT_$(V)) -GTK_DOC_V_INTROSPECT_=$(GTK_DOC_V_INTROSPECT_$(AM_DEFAULT_VERBOSITY)) -GTK_DOC_V_INTROSPECT_0=@echo " DOC Introspecting gobjects"; - scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) - $(GTK_DOC_V_SCAN)_source_dir='' ; \ + @echo ' DOC Scanning header files' + @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) - $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ + @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ + echo " DOC Introspecting gobjects"; \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ @@ -122,41 +113,32 @@ scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) test -f $$i || touch $$i ; \ done \ fi - $(AM_V_at)touch scan-build.stamp + @touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp @true #### xml #### -GTK_DOC_V_XML=$(GTK_DOC_V_XML_$(V)) -GTK_DOC_V_XML_=$(GTK_DOC_V_XML_$(AM_DEFAULT_VERBOSITY)) -GTK_DOC_V_XML_0=@echo " DOC Building XML"; - sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files) - $(GTK_DOC_V_XML)_source_dir='' ; \ + @echo ' DOC Building XML' + @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) - $(AM_V_at)touch sgml-build.stamp + @touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true #### html #### -GTK_DOC_V_HTML=$(GTK_DOC_V_HTML_$(V)) -GTK_DOC_V_HTML_=$(GTK_DOC_V_HTML_$(AM_DEFAULT_VERBOSITY)) -GTK_DOC_V_HTML_0=@echo " DOC Building HTML"; - -GTK_DOC_V_XREF=$(GTK_DOC_V_XREF_$(V)) -GTK_DOC_V_XREF_=$(GTK_DOC_V_XREF_$(AM_DEFAULT_VERBOSITY)) -GTK_DOC_V_XREF_0=@echo " DOC Fixing cross-references"; - html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) - $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \ - mkhtml_options=""; \ + @echo ' DOC Building HTML' + @rm -rf html + @mkdir html + @mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ @@ -177,18 +159,16 @@ html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) cp $(abs_builddir)/$$file $(abs_builddir)/html; \ fi; \ done; - $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) - $(AM_V_at)touch html-build.stamp + @echo ' DOC Fixing cross-references' + @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) + @touch html-build.stamp #### pdf #### -GTK_DOC_V_PDF=$(GTK_DOC_V_PDF_$(V)) -GTK_DOC_V_PDF_=$(GTK_DOC_V_PDF_$(AM_DEFAULT_VERBOSITY)) -GTK_DOC_V_PDF_0=@echo " DOC Building PDF"; - pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) - $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \ - mkpdf_options=""; \ + @echo ' DOC Building PDF' + @rm -f $(DOC_MODULE).pdf + @mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ @@ -205,7 +185,7 @@ pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) done; \ fi; \ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) - $(AM_V_at)touch pdf-build.stamp + @touch pdf-build.stamp ############## @@ -220,7 +200,7 @@ distclean-local: rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \ fi -maintainer-clean-local: +maintainer-clean-local: clean @rm -rf xml html install-data-local: @@ -257,7 +237,7 @@ uninstall-local: # Require gtk-doc when making dist # if ENABLE_GTK_DOC -dist-check-gtkdoc: docs +dist-check-gtkdoc: else dist-check-gtkdoc: @echo "*** gtk-doc must be installed and enabled in order to make dist" diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/harfbuzz.doap b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/harfbuzz.doap index d2896ebefa8..d2896ebefa8 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/harfbuzz.doap +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/harfbuzz.doap diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/Makefile.am b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/Makefile.am index 81802252fd7..81802252fd7 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/Makefile.am +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/Makefile.am diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-c-linkage-decls.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-c-linkage-decls.sh index b10310f5384..b10310f5384 100755 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-c-linkage-decls.sh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-c-linkage-decls.sh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-defs.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-defs.sh index d7a8ec281bf..d7a8ec281bf 100755 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-defs.sh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-defs.sh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-header-guards.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-header-guards.sh index 9a3302c7f87..9a3302c7f87 100755 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-header-guards.sh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-header-guards.sh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-includes.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-includes.sh index 5643c6973bc..5643c6973bc 100755 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-includes.sh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-includes.sh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-libstdc++.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-libstdc++.sh index e7e0e295e1a..e7e0e295e1a 100755 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-libstdc++.sh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-libstdc++.sh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-static-inits.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-static-inits.sh index bb0a7ff630d..bb0a7ff630d 100755 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-static-inits.sh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-static-inits.sh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-symbols.sh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-symbols.sh index 67bdf71e1b1..67bdf71e1b1 100755 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/check-symbols.sh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/check-symbols.sh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/gen-arabic-table.py b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/gen-arabic-table.py index da5a4fcbf5c..da5a4fcbf5c 100755 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/gen-arabic-table.py +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/gen-arabic-table.py diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/gen-indic-table.py b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/gen-indic-table.py index 9ed3fd6d34d..9ed3fd6d34d 100755 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/gen-indic-table.py +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/gen-indic-table.py diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/harfbuzz-gobject.pc.in b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/harfbuzz-gobject.pc.in index 70083601901..70083601901 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/harfbuzz-gobject.pc.in +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/harfbuzz-gobject.pc.in diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/harfbuzz-icu.pc.in b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/harfbuzz-icu.pc.in index 949869a3563..949869a3563 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/harfbuzz-icu.pc.in +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/harfbuzz-icu.pc.in diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/harfbuzz.pc.in b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/harfbuzz.pc.in index 7f27bbbdef0..7f27bbbdef0 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/harfbuzz.pc.in +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/harfbuzz.pc.in diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-atomic-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-atomic-private.hh index 9cc3bc5587c..9cc3bc5587c 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-atomic-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-atomic-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-blob.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-blob.cc index 7a659b26b97..7a659b26b97 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-blob.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-blob.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-blob.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-blob.h index d3d0f41b11c..d3d0f41b11c 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-blob.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-blob.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-deserialize-json.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-deserialize-json.hh index dead700db82..dead700db82 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-deserialize-json.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-deserialize-json.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-deserialize-json.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-deserialize-json.rl index 7351b2ab47c..7351b2ab47c 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-deserialize-json.rl +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-deserialize-json.rl diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-deserialize-text.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-deserialize-text.hh index a38efe3a415..a38efe3a415 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-deserialize-text.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-deserialize-text.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-deserialize-text.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-deserialize-text.rl index 8856580fbe3..8856580fbe3 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-deserialize-text.rl +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-deserialize-text.rl diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-private.hh index a8cf7702446..703239035f0 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-private.hh @@ -103,6 +103,8 @@ struct hb_buffer_t { inline unsigned int backtrack_len (void) const { return have_output? out_len : idx; } + inline unsigned int lookahead_len (void) const + { return len - idx; } inline unsigned int next_serial (void) { return serial++; } HB_INTERNAL void allocate_var (unsigned int byte_i, unsigned int count, const char *owner); @@ -134,6 +136,7 @@ struct hb_buffer_t { HB_INTERNAL void output_info (const hb_glyph_info_t &glyph_info); /* Copies glyph at idx to output but doesn't advance idx */ HB_INTERNAL void copy_glyph (void); + HB_INTERNAL bool move_to (unsigned int i); /* i is output-buffer index. */ /* Copies glyph at idx to output and advance idx. * If there's no output, just advance idx. */ inline void @@ -181,6 +184,7 @@ struct hb_buffer_t { { return likely (size < allocated) ? true : enlarge (size); } HB_INTERNAL bool make_room_for (unsigned int num_in, unsigned int num_out); + HB_INTERNAL bool shift_forward (unsigned int count); HB_INTERNAL void *get_scratch_buffer (unsigned int *size); diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-serialize.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-serialize.cc index b32092cf0b3..b32092cf0b3 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer-serialize.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer-serialize.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer.cc index 54626db2830..867438a906a 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer.cc @@ -139,6 +139,19 @@ hb_buffer_t::make_room_for (unsigned int num_in, return true; } +bool +hb_buffer_t::shift_forward (unsigned int count) +{ + assert (have_output); + if (unlikely (!ensure (len + count))) return false; + + memmove (info + idx + count, info + idx, (len - idx) * sizeof (info[0])); + len += count; + idx += count; + + return true; +} + void * hb_buffer_t::get_scratch_buffer (unsigned int *size) { @@ -345,6 +358,44 @@ hb_buffer_t::copy_glyph (void) out_len++; } +bool +hb_buffer_t::move_to (unsigned int i) +{ + if (!have_output) + { + assert (i <= len); + idx = i; + return true; + } + + assert (i <= out_len + (len - idx)); + + if (out_len < i) + { + unsigned int count = i - out_len; + if (unlikely (!make_room_for (count, count))) return false; + + memmove (out_info + out_len, info + idx, count * sizeof (out_info[0])); + idx += count; + out_len += count; + } + else if (out_len > i) + { + /* Tricky part: rewinding... */ + unsigned int count = out_len - i; + + if (unlikely (idx < count && !shift_forward (count + 32))) return false; + + assert (idx >= count); + + idx -= count; + out_len -= count; + memmove (info + idx, out_info + out_len, count * sizeof (out_info[0])); + } + + return true; +} + void hb_buffer_t::replace_glyph (hb_codepoint_t glyph_index) { diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer.h index 87c4ce58e83..3086851b012 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-buffer.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-buffer.h @@ -172,10 +172,10 @@ hb_buffer_guess_segment_properties (hb_buffer_t *buffer); typedef enum { /*< flags >*/ - HB_BUFFER_FLAG_DEFAULT = 0x00000000, - HB_BUFFER_FLAG_BOT = 0x00000001, /* Beginning-of-text */ - HB_BUFFER_FLAG_EOT = 0x00000002, /* End-of-text */ - HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES = 0x00000004 + HB_BUFFER_FLAG_DEFAULT = 0x00000000u, + HB_BUFFER_FLAG_BOT = 0x00000001u, /* Beginning-of-text */ + HB_BUFFER_FLAG_EOT = 0x00000002u, /* End-of-text */ + HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES = 0x00000004u } hb_buffer_flags_t; void @@ -275,10 +275,10 @@ hb_buffer_normalize_glyphs (hb_buffer_t *buffer); */ typedef enum { /*< flags >*/ - HB_BUFFER_SERIALIZE_FLAG_DEFAULT = 0x00000000, - HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS = 0x00000001, - HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS = 0x00000002, - HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES = 0x00000004 + HB_BUFFER_SERIALIZE_FLAG_DEFAULT = 0x00000000u, + HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS = 0x00000001u, + HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS = 0x00000002u, + HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES = 0x00000004u } hb_buffer_serialize_flags_t; typedef enum { diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-cache-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-cache-private.hh index 19b70b7e395..19b70b7e395 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-cache-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-cache-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-common.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-common.cc index cf24660f798..cf24660f798 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-common.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-common.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-common.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-common.h index 40c18872964..e445504550b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-common.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-common.h @@ -90,7 +90,7 @@ typedef union _hb_var_int_t { typedef uint32_t hb_tag_t; -#define HB_TAG(a,b,c,d) ((hb_tag_t)((((uint8_t)(a))<<24)|(((uint8_t)(b))<<16)|(((uint8_t)(c))<<8)|((uint8_t)(d)))) +#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint8_t)(c1))<<24)|(((uint8_t)(c2))<<16)|(((uint8_t)(c3))<<8)|((uint8_t)(c4)))) #define HB_UNTAG(tag) ((uint8_t)((tag)>>24)), ((uint8_t)((tag)>>16)), ((uint8_t)((tag)>>8)), ((uint8_t)(tag)) #define HB_TAG_NONE HB_TAG(0,0,0,0) diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-coretext.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-coretext.cc index f780973565b..f780973565b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-coretext.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-coretext.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-coretext.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-coretext.h index c4954fa1b2c..c4954fa1b2c 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-coretext.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-coretext.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-deprecated.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-deprecated.h index 30ae4b1caf7..30ae4b1caf7 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-deprecated.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-deprecated.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-face-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-face-private.hh index b33be0e5fce..b33be0e5fce 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-face-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-face-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-face.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-face.cc index ebe8ec5e5d5..ebe8ec5e5d5 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-face.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-face.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-face.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-face.h index f682c468de5..f682c468de5 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-face.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-face.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-fallback-shape.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-fallback-shape.cc index 1a1fcfbda1e..1a1fcfbda1e 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-fallback-shape.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-fallback-shape.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-font-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-font-private.hh index 00c0cc3f25f..00c0cc3f25f 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-font-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-font-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-font.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-font.cc index 855864377e7..855864377e7 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-font.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-font.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-font.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-font.h index 7273db43eda..7273db43eda 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-font.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-font.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ft.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ft.cc index ff1e187b343..113b0eb8502 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ft.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ft.cc @@ -94,7 +94,7 @@ hb_ft_get_glyph_h_advance (hb_font_t *font HB_UNUSED, if (unlikely (FT_Get_Advance (ft_face, glyph, load_flags, &v))) return 0; - return v >> 10; + return (v + (1<<9)) >> 10; } static hb_position_t @@ -112,7 +112,7 @@ hb_ft_get_glyph_v_advance (hb_font_t *font HB_UNUSED, /* Note: FreeType's vertical metrics grows downward while other FreeType coordinates * have a Y growing upward. Hence the extra negation. */ - return -v >> 10; + return (-v + (1<<9)) >> 10; } static hb_bool_t @@ -418,8 +418,8 @@ hb_ft_font_create (FT_Face ft_face, _hb_ft_get_font_funcs (), ft_face, (hb_destroy_func_t) _do_nothing); hb_font_set_scale (font, - ((uint64_t) ft_face->size->metrics.x_scale * (uint64_t) ft_face->units_per_EM) >> 16, - ((uint64_t) ft_face->size->metrics.y_scale * (uint64_t) ft_face->units_per_EM) >> 16); + ((uint64_t) ft_face->size->metrics.x_scale * (uint64_t) ft_face->units_per_EM + (1<<15)) >> 16, + ((uint64_t) ft_face->size->metrics.y_scale * (uint64_t) ft_face->units_per_EM + (1<<15)) >> 16); hb_font_set_ppem (font, ft_face->size->metrics.x_ppem, ft_face->size->metrics.y_ppem); diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ft.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ft.h index 696251e143f..696251e143f 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ft.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ft.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-glib.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-glib.cc index c35d9966c26..c35d9966c26 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-glib.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-glib.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-glib.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-glib.h index 63a9d3366c5..63a9d3366c5 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-glib.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-glib.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject-enums.cc.tmpl b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject-enums.cc.tmpl index ca458a3846c..ca458a3846c 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject-enums.cc.tmpl +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject-enums.cc.tmpl diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject-enums.h.tmpl b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject-enums.h.tmpl index 6ecda06c2a6..6ecda06c2a6 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject-enums.h.tmpl +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject-enums.h.tmpl diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject-structs.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject-structs.cc index 2451b66291b..2451b66291b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject-structs.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject-structs.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject-structs.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject-structs.h index 4a88d569e8d..4a88d569e8d 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject-structs.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject-structs.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject.h index ea1bd25df82..ea1bd25df82 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-gobject.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-gobject.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-graphite2.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-graphite2.cc index 6fe16ca93cd..6fe16ca93cd 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-graphite2.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-graphite2.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-graphite2.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-graphite2.h index 3eae54acbd8..3eae54acbd8 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-graphite2.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-graphite2.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-icu.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-icu.cc index c177be2c4b2..c177be2c4b2 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-icu.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-icu.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-icu.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-icu.h index f2f35f0f2ce..f2f35f0f2ce 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-icu.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-icu.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-mutex-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-mutex-private.hh index 0fb21c2e86e..0fb21c2e86e 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-mutex-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-mutex-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-object-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-object-private.hh index 8a9ae34dbee..8a9ae34dbee 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-object-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-object-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-open-file-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-open-file-private.hh index 250504ae20b..250504ae20b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-open-file-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-open-file-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-open-type-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-open-type-private.hh index ee3a21dc3b1..ee3a21dc3b1 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-open-type-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-open-type-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-head-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-head-table.hh index 0285f0cf310..0285f0cf310 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-head-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-head-table.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-hhea-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-hhea-table.hh index 611de8a6665..611de8a6665 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-hhea-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-hhea-table.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-hmtx-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-hmtx-table.hh index d107cf990a2..d107cf990a2 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-hmtx-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-hmtx-table.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-common-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-common-private.hh index 2f6e80468eb..1e75930cda4 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-common-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-common-private.hh @@ -39,6 +39,7 @@ namespace OT { #define NOT_COVERED ((unsigned int) -1) #define MAX_NESTING_LEVEL 8 +#define MAX_CONTEXT_LENGTH 64 diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-gdef-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-gdef-table.hh index d2fd8757fcb..389cbb9e398 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-gdef-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-gdef-table.hh @@ -383,12 +383,14 @@ struct GDEF { unsigned int klass = get_glyph_class (glyph); + ASSERT_STATIC ((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH == (unsigned int) LookupFlag::IgnoreBaseGlyphs); + ASSERT_STATIC ((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE == (unsigned int) LookupFlag::IgnoreLigatures); + ASSERT_STATIC ((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_MARK == (unsigned int) LookupFlag::IgnoreMarks); + switch (klass) { - default: - case UnclassifiedGlyph: return HB_OT_LAYOUT_GLYPH_PROPS_UNCLASSIFIED; + default: return 0; case BaseGlyph: return HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH; case LigatureGlyph: return HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE; - case ComponentGlyph: return HB_OT_LAYOUT_GLYPH_PROPS_COMPONENT; case MarkGlyph: klass = get_mark_attachment_type (glyph); return HB_OT_LAYOUT_GLYPH_PROPS_MARK | (klass << 8); diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-gpos-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-gpos-table.hh index 05a6f5edc7e..103676b05d3 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-gpos-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-gpos-table.hh @@ -390,6 +390,7 @@ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage orde unsigned int glyph_pos) const { TRACE_APPLY (this); + hb_buffer_t *buffer = c->buffer; const MarkRecord &record = ArrayOf<MarkRecord>::operator[](mark_index); unsigned int mark_class = record.klass; @@ -402,15 +403,15 @@ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage orde hb_position_t mark_x, mark_y, base_x, base_y; - mark_anchor.get_anchor (c->font, c->buffer->cur().codepoint, &mark_x, &mark_y); - glyph_anchor.get_anchor (c->font, c->buffer->info[glyph_pos].codepoint, &base_x, &base_y); + mark_anchor.get_anchor (c->font, buffer->cur().codepoint, &mark_x, &mark_y); + glyph_anchor.get_anchor (c->font, buffer->info[glyph_pos].codepoint, &base_x, &base_y); - hb_glyph_position_t &o = c->buffer->cur_pos(); + hb_glyph_position_t &o = buffer->cur_pos(); o.x_offset = base_x - mark_x; o.y_offset = base_y - mark_y; - o.attach_lookback() = c->buffer->idx - glyph_pos; + o.attach_lookback() = buffer->idx - glyph_pos; - c->buffer->idx++; + buffer->idx++; return TRACE_RETURN (true); } @@ -439,13 +440,14 @@ struct SinglePosFormat1 inline bool apply (hb_apply_context_t *c) const { TRACE_APPLY (this); - unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint); + hb_buffer_t *buffer = c->buffer; + unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint); if (likely (index == NOT_COVERED)) return TRACE_RETURN (false); valueFormat.apply_value (c->font, c->direction, this, - values, c->buffer->cur_pos()); + values, buffer->cur_pos()); - c->buffer->idx++; + buffer->idx++; return TRACE_RETURN (true); } @@ -484,16 +486,17 @@ struct SinglePosFormat2 inline bool apply (hb_apply_context_t *c) const { TRACE_APPLY (this); - unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint); + hb_buffer_t *buffer = c->buffer; + unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint); if (likely (index == NOT_COVERED)) return TRACE_RETURN (false); if (likely (index >= valueCount)) return TRACE_RETURN (false); valueFormat.apply_value (c->font, c->direction, this, &values[index * valueFormat.get_len ()], - c->buffer->cur_pos()); + buffer->cur_pos()); - c->buffer->idx++; + buffer->idx++; return TRACE_RETURN (true); } @@ -588,6 +591,7 @@ struct PairSet unsigned int pos) const { TRACE_APPLY (this); + hb_buffer_t *buffer = c->buffer; unsigned int len1 = valueFormats[0].get_len (); unsigned int len2 = valueFormats[1].get_len (); unsigned int record_size = USHORT::static_size * (1 + len1 + len2); @@ -597,15 +601,15 @@ struct PairSet for (unsigned int i = 0; i < count; i++) { /* TODO bsearch */ - if (c->buffer->info[pos].codepoint == record->secondGlyph) + if (buffer->info[pos].codepoint == record->secondGlyph) { valueFormats[0].apply_value (c->font, c->direction, this, - &record->values[0], c->buffer->cur_pos()); + &record->values[0], buffer->cur_pos()); valueFormats[1].apply_value (c->font, c->direction, this, - &record->values[len1], c->buffer->pos[pos]); + &record->values[len1], buffer->pos[pos]); if (len2) pos++; - c->buffer->idx = pos; + buffer->idx = pos; return TRACE_RETURN (true); } record = &StructAtOffset<PairValueRecord> (record, record_size); @@ -659,10 +663,11 @@ struct PairPosFormat1 inline bool apply (hb_apply_context_t *c) const { TRACE_APPLY (this); - hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, c->buffer->idx, 1); + hb_buffer_t *buffer = c->buffer; + hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, buffer->idx, 1); if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false); - unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint); + unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint); if (likely (index == NOT_COVERED)) return TRACE_RETURN (false); if (!skippy_iter.next ()) return TRACE_RETURN (false); @@ -729,10 +734,11 @@ struct PairPosFormat2 inline bool apply (hb_apply_context_t *c) const { TRACE_APPLY (this); - hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, c->buffer->idx, 1); + hb_buffer_t *buffer = c->buffer; + hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, buffer->idx, 1); if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false); - unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint); + unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint); if (likely (index == NOT_COVERED)) return TRACE_RETURN (false); if (!skippy_iter.next ()) return TRACE_RETURN (false); @@ -741,19 +747,19 @@ struct PairPosFormat2 unsigned int len2 = valueFormat2.get_len (); unsigned int record_len = len1 + len2; - unsigned int klass1 = (this+classDef1).get_class (c->buffer->cur().codepoint); - unsigned int klass2 = (this+classDef2).get_class (c->buffer->info[skippy_iter.idx].codepoint); + unsigned int klass1 = (this+classDef1).get_class (buffer->cur().codepoint); + unsigned int klass2 = (this+classDef2).get_class (buffer->info[skippy_iter.idx].codepoint); if (unlikely (klass1 >= class1Count || klass2 >= class2Count)) return TRACE_RETURN (false); const Value *v = &values[record_len * (klass1 * class2Count + klass2)]; valueFormat1.apply_value (c->font, c->direction, this, - v, c->buffer->cur_pos()); + v, buffer->cur_pos()); valueFormat2.apply_value (c->font, c->direction, this, - v + len1, c->buffer->pos[skippy_iter.idx]); + v + len1, buffer->pos[skippy_iter.idx]); - c->buffer->idx = skippy_iter.idx; + buffer->idx = skippy_iter.idx; if (len2) - c->buffer->idx++; + buffer->idx++; return TRACE_RETURN (true); } @@ -875,29 +881,30 @@ struct CursivePosFormat1 inline bool apply (hb_apply_context_t *c) const { TRACE_APPLY (this); + hb_buffer_t *buffer = c->buffer; /* We don't handle mark glyphs here. */ - if (c->buffer->cur().glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK) return TRACE_RETURN (false); + if (unlikely (_hb_glyph_info_is_mark (&buffer->cur()))) return TRACE_RETURN (false); - hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, c->buffer->idx, 1); + hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, buffer->idx, 1); if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false); - const EntryExitRecord &this_record = entryExitRecord[(this+coverage).get_coverage (c->buffer->cur().codepoint)]; + const EntryExitRecord &this_record = entryExitRecord[(this+coverage).get_coverage (buffer->cur().codepoint)]; if (!this_record.exitAnchor) return TRACE_RETURN (false); if (!skippy_iter.next ()) return TRACE_RETURN (false); - const EntryExitRecord &next_record = entryExitRecord[(this+coverage).get_coverage (c->buffer->info[skippy_iter.idx].codepoint)]; + const EntryExitRecord &next_record = entryExitRecord[(this+coverage).get_coverage (buffer->info[skippy_iter.idx].codepoint)]; if (!next_record.entryAnchor) return TRACE_RETURN (false); - unsigned int i = c->buffer->idx; + unsigned int i = buffer->idx; unsigned int j = skippy_iter.idx; hb_position_t entry_x, entry_y, exit_x, exit_y; - (this+this_record.exitAnchor).get_anchor (c->font, c->buffer->info[i].codepoint, &exit_x, &exit_y); - (this+next_record.entryAnchor).get_anchor (c->font, c->buffer->info[j].codepoint, &entry_x, &entry_y); + (this+this_record.exitAnchor).get_anchor (c->font, buffer->info[i].codepoint, &exit_x, &exit_y); + (this+next_record.entryAnchor).get_anchor (c->font, buffer->info[j].codepoint, &entry_x, &entry_y); - hb_glyph_position_t *pos = c->buffer->pos; + hb_glyph_position_t *pos = buffer->pos; hb_position_t d; /* Main-direction adjustment */ @@ -950,7 +957,7 @@ struct CursivePosFormat1 pos[j].x_offset = exit_x - entry_x; } - c->buffer->idx = j; + buffer->idx = j; return TRACE_RETURN (true); } @@ -1022,23 +1029,24 @@ struct MarkBasePosFormat1 inline bool apply (hb_apply_context_t *c) const { TRACE_APPLY (this); - unsigned int mark_index = (this+markCoverage).get_coverage (c->buffer->cur().codepoint); + hb_buffer_t *buffer = c->buffer; + unsigned int mark_index = (this+markCoverage).get_coverage (buffer->cur().codepoint); if (likely (mark_index == NOT_COVERED)) return TRACE_RETURN (false); /* now we search backwards for a non-mark glyph */ - hb_apply_context_t::skipping_backward_iterator_t skippy_iter (c, c->buffer->idx, 1); + hb_apply_context_t::skipping_backward_iterator_t skippy_iter (c, buffer->idx, 1); skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks); do { if (!skippy_iter.prev ()) return TRACE_RETURN (false); /* We only want to attach to the first of a MultipleSubst sequence. Reject others. */ - if (0 == get_lig_comp (c->buffer->info[skippy_iter.idx])) break; + if (0 == _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx])) break; skippy_iter.reject (); } while (1); - /* The following assertion is too strong, so we've disabled it. */ - if (!(c->buffer->info[skippy_iter.idx].glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH)) {/*return TRACE_RETURN (false);*/} + /* Checking that matched glyph is actually a base glyph by GDEF is too strong; disabled */ + if (!_hb_glyph_info_is_base_glyph (&buffer->info[skippy_iter.idx])) { /*return TRACE_RETURN (false);*/ } - unsigned int base_index = (this+baseCoverage).get_coverage (c->buffer->info[skippy_iter.idx].codepoint); + unsigned int base_index = (this+baseCoverage).get_coverage (buffer->info[skippy_iter.idx].codepoint); if (base_index == NOT_COVERED) return TRACE_RETURN (false); return TRACE_RETURN ((this+markArray).apply (c, mark_index, base_index, this+baseArray, classCount, skippy_iter.idx)); @@ -1125,19 +1133,20 @@ struct MarkLigPosFormat1 inline bool apply (hb_apply_context_t *c) const { TRACE_APPLY (this); - unsigned int mark_index = (this+markCoverage).get_coverage (c->buffer->cur().codepoint); + hb_buffer_t *buffer = c->buffer; + unsigned int mark_index = (this+markCoverage).get_coverage (buffer->cur().codepoint); if (likely (mark_index == NOT_COVERED)) return TRACE_RETURN (false); /* now we search backwards for a non-mark glyph */ - hb_apply_context_t::skipping_backward_iterator_t skippy_iter (c, c->buffer->idx, 1); + hb_apply_context_t::skipping_backward_iterator_t skippy_iter (c, buffer->idx, 1); skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks); if (!skippy_iter.prev ()) return TRACE_RETURN (false); - /* The following assertion is too strong, so we've disabled it. */ - if (!(c->buffer->info[skippy_iter.idx].glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE)) {/*return TRACE_RETURN (false);*/} + /* Checking that matched glyph is actually a ligature by GDEF is too strong; disabled */ + if (!_hb_glyph_info_is_ligature (&buffer->info[skippy_iter.idx])) { /*return TRACE_RETURN (false);*/ } unsigned int j = skippy_iter.idx; - unsigned int lig_index = (this+ligatureCoverage).get_coverage (c->buffer->info[j].codepoint); + unsigned int lig_index = (this+ligatureCoverage).get_coverage (buffer->info[j].codepoint); if (lig_index == NOT_COVERED) return TRACE_RETURN (false); const LigatureArray& lig_array = this+ligatureArray; @@ -1152,11 +1161,11 @@ struct MarkLigPosFormat1 * can directly use the component index. If not, we attach the mark * glyph to the last component of the ligature. */ unsigned int comp_index; - unsigned int lig_id = get_lig_id (c->buffer->info[j]); - unsigned int mark_id = get_lig_id (c->buffer->cur()); - unsigned int mark_comp = get_lig_comp (c->buffer->cur()); + unsigned int lig_id = _hb_glyph_info_get_lig_id (&buffer->info[j]); + unsigned int mark_id = _hb_glyph_info_get_lig_id (&buffer->cur()); + unsigned int mark_comp = _hb_glyph_info_get_lig_comp (&buffer->cur()); if (lig_id && lig_id == mark_id && mark_comp > 0) - comp_index = MIN (comp_count, get_lig_comp (c->buffer->cur())) - 1; + comp_index = MIN (comp_count, _hb_glyph_info_get_lig_comp (&buffer->cur())) - 1; else comp_index = comp_count - 1; @@ -1240,22 +1249,23 @@ struct MarkMarkPosFormat1 inline bool apply (hb_apply_context_t *c) const { TRACE_APPLY (this); - unsigned int mark1_index = (this+mark1Coverage).get_coverage (c->buffer->cur().codepoint); + hb_buffer_t *buffer = c->buffer; + unsigned int mark1_index = (this+mark1Coverage).get_coverage (buffer->cur().codepoint); if (likely (mark1_index == NOT_COVERED)) return TRACE_RETURN (false); /* now we search backwards for a suitable mark glyph until a non-mark glyph */ - hb_apply_context_t::skipping_backward_iterator_t skippy_iter (c, c->buffer->idx, 1); + hb_apply_context_t::skipping_backward_iterator_t skippy_iter (c, buffer->idx, 1); skippy_iter.set_lookup_props (c->lookup_props & ~LookupFlag::IgnoreFlags); if (!skippy_iter.prev ()) return TRACE_RETURN (false); - if (!(c->buffer->info[skippy_iter.idx].glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK)) { return TRACE_RETURN (false); } + if (!_hb_glyph_info_is_mark (&buffer->info[skippy_iter.idx])) { return TRACE_RETURN (false); } unsigned int j = skippy_iter.idx; - unsigned int id1 = get_lig_id (c->buffer->cur()); - unsigned int id2 = get_lig_id (c->buffer->info[j]); - unsigned int comp1 = get_lig_comp (c->buffer->cur()); - unsigned int comp2 = get_lig_comp (c->buffer->info[j]); + unsigned int id1 = _hb_glyph_info_get_lig_id (&buffer->cur()); + unsigned int id2 = _hb_glyph_info_get_lig_id (&buffer->info[j]); + unsigned int comp1 = _hb_glyph_info_get_lig_comp (&buffer->cur()); + unsigned int comp2 = _hb_glyph_info_get_lig_comp (&buffer->info[j]); if (likely (id1 == id2)) { if (id1 == 0) /* Marks belonging to the same base. */ @@ -1273,7 +1283,7 @@ struct MarkMarkPosFormat1 return TRACE_RETURN (false); good: - unsigned int mark2_index = (this+mark2Coverage).get_coverage (c->buffer->info[j].codepoint); + unsigned int mark2_index = (this+mark2Coverage).get_coverage (buffer->info[j].codepoint); if (mark2_index == NOT_COVERED) return TRACE_RETURN (false); return TRACE_RETURN ((this+mark1Array).apply (c, mark1_index, mark2_index, this+mark2Array, classCount, j)); @@ -1591,9 +1601,7 @@ GPOS::position_finish (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer) for (unsigned int i = 0; i < len; i++) fix_mark_attachment (pos, i, direction); - HB_BUFFER_DEALLOCATE_VAR (buffer, syllable); - HB_BUFFER_DEALLOCATE_VAR (buffer, lig_props); - HB_BUFFER_DEALLOCATE_VAR (buffer, glyph_props); + _hb_buffer_deallocate_gsubgpos_vars (buffer); } diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-gsub-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-gsub-table.hh index fefc71e8b49..d5f8b311ebf 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-gsub-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-gsub-table.hh @@ -291,8 +291,8 @@ struct Sequence TRACE_APPLY (this); if (unlikely (!substitute.len)) return TRACE_RETURN (false); - unsigned int klass = c->buffer->cur().glyph_props() & - HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE ? HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0; + 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. */ { @@ -301,7 +301,7 @@ struct Sequence else { for (unsigned int i = 0; i < count; i++) { - set_lig_props_for_component (c->buffer->cur(), i); + _hb_glyph_info_set_lig_props_for_component (&c->buffer->cur(), i); c->output_glyph (substitute.array[i], klass); } c->buffer->skip_glyph (); @@ -663,27 +663,26 @@ struct Ligature unsigned int count = component.len; if (unlikely (count < 1)) return TRACE_RETURN (false); - unsigned int end_offset = 0; bool is_mark_ligature = false; unsigned int total_component_count = 0; + unsigned int match_length = 0; + unsigned int match_positions[MAX_CONTEXT_LENGTH]; + if (likely (!match_input (c, count, &component[1], match_glyph, NULL, - &end_offset, + &match_length, + match_positions, &is_mark_ligature, &total_component_count))) return TRACE_RETURN (false); - /* Deal, we are forming the ligature. */ - c->buffer->merge_clusters (c->buffer->idx, c->buffer->idx + end_offset); - ligate_input (c, count, - &component[1], - match_glyph, - NULL, + match_positions, + match_length, ligGlyph, is_mark_ligature, total_component_count); @@ -1038,7 +1037,9 @@ struct ReverseChainSingleSubstFormat1 1)) { c->replace_glyph_inplace (substitute[index]); - c->buffer->idx--; /* Reverse! */ + /* Note: We DON'T decrease buffer->idx. The main loop does it + * for us. This is useful for preventing surprises if someone + * calls us through a Context lookup. */ return TRACE_RETURN (true); } @@ -1373,15 +1374,15 @@ struct GSUB : GSUBGPOS void GSUB::substitute_start (hb_font_t *font, hb_buffer_t *buffer) { - HB_BUFFER_ALLOCATE_VAR (buffer, glyph_props); - HB_BUFFER_ALLOCATE_VAR (buffer, lig_props); - HB_BUFFER_ALLOCATE_VAR (buffer, syllable); + _hb_buffer_allocate_gsubgpos_vars (buffer); const GDEF &gdef = *hb_ot_layout_from_face (font->face)->gdef; unsigned int count = buffer->len; - for (unsigned int i = 0; i < count; i++) { - buffer->info[i].lig_props() = buffer->info[i].syllable() = 0; - buffer->info[i].glyph_props() = gdef.get_glyph_props (buffer->info[i].codepoint); + for (unsigned int i = 0; i < count; i++) + { + _hb_glyph_info_set_glyph_props (&buffer->info[i], gdef.get_glyph_props (buffer->info[i].codepoint)); + _hb_glyph_info_clear_lig_props (&buffer->info[i]); + buffer->info[i].syllable() = 0; } } diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-gsubgpos-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-gsubgpos-private.hh index 316f506f0d3..16c96fafb59 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-gsubgpos-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-gsubgpos-private.hh @@ -401,7 +401,7 @@ struct hb_apply_context_t { unsigned int property; - property = info.glyph_props(); + property = _hb_glyph_info_get_glyph_props (&info); if (!c->match_properties (info.codepoint, property, lookup_props)) return SKIP_YES; @@ -409,7 +409,7 @@ struct hb_apply_context_t if (unlikely (_hb_glyph_info_is_default_ignorable (&info) && (ignore_zwnj || !_hb_glyph_info_is_zwnj (&info)) && (ignore_zwj || !_hb_glyph_info_is_zwj (&info)) && - !is_a_ligature (info))) + !_hb_glyph_info_ligated (&info))) return SKIP_MAYBE; return SKIP_NO; @@ -610,36 +610,47 @@ struct hb_apply_context_t { unsigned int property; - property = info->glyph_props(); + property = _hb_glyph_info_get_glyph_props (info); return match_properties (info->codepoint, property, lookup_props); } - inline void set_class (hb_codepoint_t glyph_index, unsigned int class_guess) const + inline void _set_glyph_props (hb_codepoint_t glyph_index, + unsigned int class_guess = 0, + bool ligature = 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; if (likely (has_glyph_classes)) - buffer->cur().glyph_props() = gdef.get_glyph_props (glyph_index); + _hb_glyph_info_set_glyph_props (&buffer->cur(), add_in | gdef.get_glyph_props (glyph_index)); else if (class_guess) - buffer->cur().glyph_props() = class_guess; + _hb_glyph_info_set_glyph_props (&buffer->cur(), add_in | class_guess); } - inline void output_glyph (hb_codepoint_t glyph_index, - unsigned int class_guess = 0) const + inline void replace_glyph (hb_codepoint_t glyph_index) const { - set_class (glyph_index, class_guess); - buffer->output_glyph (glyph_index); + _set_glyph_props (glyph_index); + buffer->replace_glyph (glyph_index); + } + inline void replace_glyph_inplace (hb_codepoint_t glyph_index) const + { + _set_glyph_props (glyph_index); + buffer->cur().codepoint = glyph_index; } - inline void replace_glyph (hb_codepoint_t glyph_index, - unsigned int class_guess = 0) const + inline void replace_glyph_with_ligature (hb_codepoint_t glyph_index, + unsigned int class_guess) const { - set_class (glyph_index, class_guess); + _set_glyph_props (glyph_index, class_guess, true); buffer->replace_glyph (glyph_index); } - inline void replace_glyph_inplace (hb_codepoint_t glyph_index, - unsigned int class_guess = 0) const + inline void output_glyph (hb_codepoint_t glyph_index, + unsigned int class_guess) const { - set_class (glyph_index, class_guess); - buffer->cur().codepoint = glyph_index; + _set_glyph_props (glyph_index, class_guess); + buffer->output_glyph (glyph_index); } }; @@ -752,13 +763,18 @@ static inline bool match_input (hb_apply_context_t *c, const USHORT input[], /* Array of input values--start with second glyph */ match_func_t match_func, const void *match_data, - unsigned int *end_offset = NULL, + unsigned int *end_offset, + unsigned int match_positions[MAX_CONTEXT_LENGTH], bool *p_is_mark_ligature = NULL, unsigned int *p_total_component_count = NULL) { TRACE_APPLY (NULL); - hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, c->buffer->idx, count - 1); + if (unlikely (count > MAX_CONTEXT_LENGTH)) TRACE_RETURN (false); + + hb_buffer_t *buffer = c->buffer; + + hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, buffer->idx, count - 1); skippy_iter.set_match_func (match_func, match_data, input); if (skippy_iter.has_no_chance ()) return TRACE_RETURN (false); @@ -780,20 +796,23 @@ static inline bool match_input (hb_apply_context_t *c, * ligate with a conjunct...) */ - bool is_mark_ligature = !!(c->buffer->cur().glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK); + bool is_mark_ligature = _hb_glyph_info_is_mark (&buffer->cur()); unsigned int total_component_count = 0; - total_component_count += get_lig_num_comps (c->buffer->cur()); + total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->cur()); - unsigned int first_lig_id = get_lig_id (c->buffer->cur()); - unsigned int first_lig_comp = get_lig_comp (c->buffer->cur()); + unsigned int first_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur()); + unsigned int first_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->cur()); + match_positions[0] = buffer->idx; for (unsigned int i = 1; i < count; i++) { if (!skippy_iter.next ()) return TRACE_RETURN (false); - unsigned int this_lig_id = get_lig_id (c->buffer->info[skippy_iter.idx]); - unsigned int this_lig_comp = get_lig_comp (c->buffer->info[skippy_iter.idx]); + match_positions[i] = skippy_iter.idx; + + unsigned int this_lig_id = _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx]); + unsigned int this_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]); if (first_lig_id && first_lig_comp) { /* If first component was attached to a previous ligature component, @@ -809,12 +828,11 @@ static inline bool match_input (hb_apply_context_t *c, return TRACE_RETURN (false); } - is_mark_ligature = is_mark_ligature && (c->buffer->info[skippy_iter.idx].glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK); - total_component_count += get_lig_num_comps (c->buffer->info[skippy_iter.idx]); + is_mark_ligature = is_mark_ligature && _hb_glyph_info_is_mark (&buffer->info[skippy_iter.idx]); + total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->info[skippy_iter.idx]); } - if (end_offset) - *end_offset = skippy_iter.idx - c->buffer->idx + 1; + *end_offset = skippy_iter.idx - buffer->idx + 1; if (p_is_mark_ligature) *p_is_mark_ligature = is_mark_ligature; @@ -825,17 +843,18 @@ static inline bool match_input (hb_apply_context_t *c, return TRACE_RETURN (true); } static inline void ligate_input (hb_apply_context_t *c, - unsigned int count, /* Including the first glyph (not matched) */ - const USHORT input[], /* Array of input values--start with second glyph */ - match_func_t match_func, - const void *match_data, + unsigned int count, /* Including the first glyph */ + unsigned int match_positions[MAX_CONTEXT_LENGTH], /* Including the first glyph */ + unsigned int match_length, hb_codepoint_t lig_glyph, bool is_mark_ligature, unsigned int total_component_count) { - hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, c->buffer->idx, count - 1); - skippy_iter.set_match_func (match_func, match_data, input); - if (skippy_iter.has_no_chance ()) return; + TRACE_APPLY (NULL); + + hb_buffer_t *buffer = c->buffer; + + buffer->merge_clusters (buffer->idx, buffer->idx + match_length); /* * - If it *is* a mark ligature, we don't allocate a new ligature id, and leave @@ -866,48 +885,46 @@ static inline void ligate_input (hb_apply_context_t *c, */ unsigned int klass = is_mark_ligature ? 0 : HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE; - unsigned int lig_id = is_mark_ligature ? 0 : allocate_lig_id (c->buffer); - unsigned int last_lig_id = get_lig_id (c->buffer->cur()); - unsigned int last_num_components = get_lig_num_comps (c->buffer->cur()); + unsigned int lig_id = is_mark_ligature ? 0 : _hb_allocate_lig_id (buffer); + unsigned int last_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur()); + unsigned int last_num_components = _hb_glyph_info_get_lig_num_comps (&buffer->cur()); unsigned int components_so_far = last_num_components; if (!is_mark_ligature) { - set_lig_props_for_ligature (c->buffer->cur(), lig_id, total_component_count); - if (_hb_glyph_info_get_general_category (&c->buffer->cur()) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) - _hb_glyph_info_set_general_category (&c->buffer->cur(), HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER); + _hb_glyph_info_set_lig_props_for_ligature (&buffer->cur(), lig_id, total_component_count); + if (_hb_glyph_info_get_general_category (&buffer->cur()) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) + _hb_glyph_info_set_general_category (&buffer->cur(), HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER); } - c->replace_glyph (lig_glyph, klass); + c->replace_glyph_with_ligature (lig_glyph, klass); for (unsigned int i = 1; i < count; i++) { - if (!skippy_iter.next ()) return; - - while (c->buffer->idx < skippy_iter.idx) + while (buffer->idx < match_positions[i]) { if (!is_mark_ligature) { unsigned int new_lig_comp = components_so_far - last_num_components + - MIN (MAX (get_lig_comp (c->buffer->cur()), 1u), last_num_components); - set_lig_props_for_mark (c->buffer->cur(), lig_id, new_lig_comp); + MIN (MAX (_hb_glyph_info_get_lig_comp (&buffer->cur()), 1u), last_num_components); + _hb_glyph_info_set_lig_props_for_mark (&buffer->cur(), lig_id, new_lig_comp); } - c->buffer->next_glyph (); + buffer->next_glyph (); } - last_lig_id = get_lig_id (c->buffer->cur()); - last_num_components = get_lig_num_comps (c->buffer->cur()); + last_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur()); + last_num_components = _hb_glyph_info_get_lig_num_comps (&buffer->cur()); components_so_far += last_num_components; /* Skip the base glyph */ - c->buffer->idx++; + buffer->idx++; } if (!is_mark_ligature && last_lig_id) { /* Re-adjust components for any marks following. */ - for (unsigned int i = c->buffer->idx; i < c->buffer->len; i++) { - if (last_lig_id == get_lig_id (c->buffer->info[i])) { + for (unsigned int i = buffer->idx; i < buffer->len; i++) { + if (last_lig_id == _hb_glyph_info_get_lig_id (&buffer->info[i])) { unsigned int new_lig_comp = components_so_far - last_num_components + - MIN (MAX (get_lig_comp (c->buffer->info[i]), 1u), last_num_components); - set_lig_props_for_mark (c->buffer->info[i], lig_id, new_lig_comp); + MIN (MAX (_hb_glyph_info_get_lig_comp (&buffer->info[i]), 1u), last_num_components); + _hb_glyph_info_set_lig_props_for_mark (&buffer->info[i], lig_id, new_lig_comp); } else break; } @@ -982,99 +999,82 @@ static inline void recurse_lookups (context_t *c, static inline bool apply_lookup (hb_apply_context_t *c, unsigned int count, /* Including the first glyph */ - const USHORT input[], /* Array of input values--start with second glyph */ - match_func_t match_func, - const void *match_data, + unsigned int match_positions[MAX_CONTEXT_LENGTH], /* Including the first glyph */ unsigned int lookupCount, - const LookupRecord lookupRecord[] /* Array of LookupRecords--in design order */) + const LookupRecord lookupRecord[], /* Array of LookupRecords--in design order */ + unsigned int match_length) { TRACE_APPLY (NULL); - unsigned int end = c->buffer->len; - if (unlikely (count == 0 || c->buffer->idx + count > end)) - return TRACE_RETURN (false); + hb_buffer_t *buffer = c->buffer; + unsigned int end; - /* TODO We don't support lookupRecord arrays that are not increasing: - * Should be easy for in_place ones at least. */ - - /* Note: If sublookup is reverse, it will underflow after the first loop - * and we jump out of it. Not entirely disastrous. So we don't check - * for reverse lookup here. - */ + /* All positions are distance from beginning of *output* buffer. + * Adjust. */ + { + unsigned int bl = buffer->backtrack_len (); + end = bl + match_length; - hb_apply_context_t::skipping_forward_iterator_t skippy_iter (c, c->buffer->idx, count - 1); - skippy_iter.set_match_func (match_func, match_data, input); - uint8_t syllable = c->buffer->cur().syllable(); + int delta = bl - buffer->idx; + /* Convert positions to new indexing. */ + for (unsigned int j = 0; j < count; j++) + match_positions[j] += delta; + } - unsigned int i = 0; - if (lookupCount && 0 == lookupRecord->sequenceIndex) + for (unsigned int i = 0; i < lookupCount; i++) { - unsigned int old_pos = c->buffer->idx; + unsigned int idx = lookupRecord[i].sequenceIndex; + if (idx >= count) + continue; - /* Apply a lookup */ - bool done = c->recurse (lookupRecord->lookupListIndex); + buffer->move_to (match_positions[idx]); - lookupRecord++; - lookupCount--; - i++; + unsigned int orig_len = buffer->backtrack_len () + buffer->lookahead_len (); + if (!c->recurse (lookupRecord[i].lookupListIndex)) + continue; - if (!done) - goto not_applied; - else - { - if (c->table_index == 1) - c->buffer->idx = old_pos + 1; - /* Reinitialize iterator. */ - hb_apply_context_t::skipping_forward_iterator_t tmp (c, c->buffer->idx - 1, count - i); - tmp.set_syllable (syllable); - skippy_iter = tmp; - } - } - else - { - not_applied: - /* No lookup applied for this index */ - c->buffer->next_glyph (); - i++; - } - while (i < count) - { - if (!skippy_iter.next ()) return TRACE_RETURN (true); - while (c->buffer->idx < skippy_iter.idx) - c->buffer->next_glyph (); + unsigned int new_len = buffer->backtrack_len () + buffer->lookahead_len (); + int delta = new_len - orig_len; - if (lookupCount && i == lookupRecord->sequenceIndex) - { - unsigned int old_pos = c->buffer->idx; + if (!delta) + continue; - /* Apply a lookup */ - bool done = c->recurse (lookupRecord->lookupListIndex); + /* Recursed lookup changed buffer len. Adjust. */ - lookupRecord++; - lookupCount--; - i++; + /* end can't go back past the current match position. */ + end = MAX ((int) match_positions[idx] + 1, int (end) + delta); - if (!done) - goto not_applied2; - else - { - if (c->table_index == 1) - c->buffer->idx = old_pos + 1; - /* Reinitialize iterator. */ - hb_apply_context_t::skipping_forward_iterator_t tmp (c, c->buffer->idx - 1, count - i); - tmp.set_syllable (syllable); - skippy_iter = tmp; - } + unsigned int next = idx + 1; /* next now is the position after the recursed lookup. */ + + if (delta > 0) + { + if (unlikely (delta + count > MAX_CONTEXT_LENGTH)) + break; } else { - not_applied2: - /* No lookup applied for this index */ - c->buffer->next_glyph (); - i++; + /* NOTE: delta is negative. */ + delta = MAX (delta, (int) next - (int) count); + next -= delta; } + + /* Shift! */ + memmove (match_positions + next + delta, match_positions + next, + (count - next) * sizeof (match_positions[0])); + next += delta; + count += delta; + + /* Fill in new entries. */ + for (unsigned int j = idx + 1; j < next; j++) + match_positions[j] = match_positions[j - 1] + 1; + + /* And fixup the rest. */ + for (; next < count; next++) + match_positions[next] += delta; } + buffer->move_to (end); + return TRACE_RETURN (true); } @@ -1146,13 +1146,16 @@ static inline bool context_apply_lookup (hb_apply_context_t *c, const LookupRecord lookupRecord[], ContextApplyLookupContext &lookup_context) { + unsigned int match_length = 0; + unsigned int match_positions[MAX_CONTEXT_LENGTH]; return match_input (c, inputCount, input, - lookup_context.funcs.match, lookup_context.match_data) + lookup_context.funcs.match, lookup_context.match_data, + &match_length, match_positions) && apply_lookup (c, - inputCount, input, - lookup_context.funcs.match, lookup_context.match_data, - lookupCount, lookupRecord); + inputCount, match_positions, + lookupCount, lookupRecord, + match_length); } struct Rule @@ -1726,22 +1729,23 @@ static inline bool chain_context_apply_lookup (hb_apply_context_t *c, const LookupRecord lookupRecord[], ChainContextApplyLookupContext &lookup_context) { - unsigned int lookahead_offset = 0; + unsigned int match_length = 0; + unsigned int match_positions[MAX_CONTEXT_LENGTH]; return match_input (c, inputCount, input, lookup_context.funcs.match, lookup_context.match_data[1], - &lookahead_offset) + &match_length, match_positions) && match_backtrack (c, backtrackCount, backtrack, lookup_context.funcs.match, lookup_context.match_data[0]) && match_lookahead (c, lookaheadCount, lookahead, lookup_context.funcs.match, lookup_context.match_data[2], - lookahead_offset) + match_length) && apply_lookup (c, - inputCount, input, - lookup_context.funcs.match, lookup_context.match_data[1], - lookupCount, lookupRecord); + inputCount, match_positions, + lookupCount, lookupRecord, + match_length); } struct ChainRule diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-jstf-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-jstf-table.hh index 79eb859566a..79eb859566a 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-jstf-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-jstf-table.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-private.hh index c5ba8b4b4d7..139e33fe7a3 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout-private.hh @@ -1,6 +1,6 @@ /* * Copyright © 2007,2008,2009 Red Hat, Inc. - * Copyright © 2012 Google, Inc. + * Copyright © 2012,2013 Google, Inc. * * This is part of HarfBuzz, a text shaping library. * @@ -38,40 +38,179 @@ #include "hb-set-private.hh" -/* buffer var allocations, used during the GSUB/GPOS processing */ -#define glyph_props() var1.u16[0] /* GDEF glyph properties */ -#define syllable() var1.u8[2] /* GSUB/GPOS shaping boundaries */ -#define lig_props() var1.u8[3] /* GSUB/GPOS ligature tracking */ +/* + * GDEF + */ + +typedef enum +{ + /* The following three match LookupFlags::Ignore* numbers. */ + HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH = 0x02u, + HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE = 0x04u, + HB_OT_LAYOUT_GLYPH_PROPS_MARK = 0x08u, + + /* 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_PRESERVE = HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED | + HB_OT_LAYOUT_GLYPH_PROPS_LIGATED +} hb_ot_layout_glyph_class_mask_t; + + +/* + * GSUB/GPOS + */ + +HB_INTERNAL hb_bool_t +hb_ot_layout_lookup_would_substitute_fast (hb_face_t *face, + unsigned int lookup_index, + const hb_codepoint_t *glyphs, + unsigned int glyphs_length, + hb_bool_t zero_context); + + +/* Should be called before all the substitute_lookup's are done. */ +HB_INTERNAL void +hb_ot_layout_substitute_start (hb_font_t *font, + hb_buffer_t *buffer); + + +struct hb_ot_layout_lookup_accelerator_t; + +namespace OT { + struct hb_apply_context_t; + struct SubstLookup; +} + +HB_INTERNAL void +hb_ot_layout_substitute_lookup (OT::hb_apply_context_t *c, + const OT::SubstLookup &lookup, + const hb_ot_layout_lookup_accelerator_t &accel); + + +/* Should be called after all the substitute_lookup's are done */ +HB_INTERNAL void +hb_ot_layout_substitute_finish (hb_font_t *font, + hb_buffer_t *buffer); + + +/* Should be called before all the position_lookup's are done. Resets positions to zero. */ +HB_INTERNAL void +hb_ot_layout_position_start (hb_font_t *font, + hb_buffer_t *buffer); + +/* Should be called after all the position_lookup's are done */ +HB_INTERNAL void +hb_ot_layout_position_finish (hb_font_t *font, + hb_buffer_t *buffer); + + + +/* + * hb_ot_layout_t + */ + +namespace OT { + struct GDEF; + struct GSUB; + struct GPOS; +} + +struct hb_ot_layout_lookup_accelerator_t +{ + template <typename TLookup> + inline void init (const TLookup &lookup) + { + digest.init (); + lookup.add_coverage (&digest); + } + + template <typename TLookup> + inline void fini (const TLookup &lookup) + { + } + + hb_set_digest_t digest; +}; + +struct hb_ot_layout_t +{ + hb_blob_t *gdef_blob; + hb_blob_t *gsub_blob; + hb_blob_t *gpos_blob; + + const struct OT::GDEF *gdef; + const struct OT::GSUB *gsub; + const struct OT::GPOS *gpos; + + unsigned int gsub_lookup_count; + unsigned int gpos_lookup_count; + + hb_ot_layout_lookup_accelerator_t *gsub_accels; + hb_ot_layout_lookup_accelerator_t *gpos_accels; +}; + + +HB_INTERNAL hb_ot_layout_t * +_hb_ot_layout_create (hb_face_t *face); + +HB_INTERNAL void +_hb_ot_layout_destroy (hb_ot_layout_t *layout); + + +#define hb_ot_layout_from_face(face) ((hb_ot_layout_t *) face->shaper_data.ot) + + +/* + * Buffer var routines. + */ /* buffer var allocations, used during the entire shaping process */ #define unicode_props0() var2.u8[0] #define unicode_props1() var2.u8[1] +/* buffer var allocations, used during the GSUB/GPOS processing */ +#define glyph_props() var1.u16[0] /* GDEF glyph properties */ +#define lig_props() var1.u8[2] /* GSUB/GPOS ligature tracking */ +#define syllable() var1.u8[3] /* GSUB/GPOS shaping boundaries */ + +/* unicode_props */ + +enum { + MASK0_ZWJ = 0x20u, + MASK0_ZWNJ = 0x40u, + MASK0_IGNORABLE = 0x80u, + MASK0_GEN_CAT = 0x1Fu +}; inline void _hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_unicode_funcs_t *unicode) { + /* XXX This shouldn't be inlined, or at least not while is_default_ignorable() is inline. */ info->unicode_props0() = ((unsigned int) unicode->general_category (info->codepoint)) | - (unicode->is_default_ignorable (info->codepoint) ? 0x80 : 0) | - (info->codepoint == 0x200C ? 0x40 : 0) | - (info->codepoint == 0x200D ? 0x20 : 0); + (unicode->is_default_ignorable (info->codepoint) ? MASK0_IGNORABLE : 0) | + (info->codepoint == 0x200C ? MASK0_ZWNJ : 0) | + (info->codepoint == 0x200D ? MASK0_ZWJ : 0); info->unicode_props1() = unicode->modified_combining_class (info->codepoint); } inline void -_hb_glyph_info_set_general_category (hb_glyph_info_t *info, hb_unicode_general_category_t gen_cat) +_hb_glyph_info_set_general_category (hb_glyph_info_t *info, + hb_unicode_general_category_t gen_cat) { - info->unicode_props0() = (unsigned int) gen_cat | ((info->unicode_props0()) & ~0x1F); + info->unicode_props0() = (unsigned int) gen_cat | ((info->unicode_props0()) & ~MASK0_GEN_CAT); } inline hb_unicode_general_category_t _hb_glyph_info_get_general_category (const hb_glyph_info_t *info) { - return (hb_unicode_general_category_t) (info->unicode_props0() & 0x1F); + return (hb_unicode_general_category_t) (info->unicode_props0() & MASK0_GEN_CAT); } inline void -_hb_glyph_info_set_modified_combining_class (hb_glyph_info_t *info, unsigned int modified_class) +_hb_glyph_info_set_modified_combining_class (hb_glyph_info_t *info, + unsigned int modified_class) { info->unicode_props1() = modified_class; } @@ -85,43 +224,28 @@ _hb_glyph_info_get_modified_combining_class (const hb_glyph_info_t *info) inline hb_bool_t _hb_glyph_info_is_default_ignorable (const hb_glyph_info_t *info) { - return !!(info->unicode_props0() & 0x80); + return !!(info->unicode_props0() & MASK0_IGNORABLE); } inline hb_bool_t _hb_glyph_info_is_zwnj (const hb_glyph_info_t *info) { - return !!(info->unicode_props0() & 0x40); + return !!(info->unicode_props0() & MASK0_ZWNJ); } inline hb_bool_t _hb_glyph_info_is_zwj (const hb_glyph_info_t *info) { - return !!(info->unicode_props0() & 0x20); + return !!(info->unicode_props0() & MASK0_ZWJ); } +inline void +_hb_glyph_info_flip_joiners (hb_glyph_info_t *info) +{ + info->unicode_props0() ^= MASK0_ZWNJ | MASK0_ZWJ; +} -#define hb_ot_layout_from_face(face) ((hb_ot_layout_t *) face->shaper_data.ot) - -/* - * GDEF - */ - -typedef enum { - HB_OT_LAYOUT_GLYPH_PROPS_UNCLASSIFIED = 1 << HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED, - HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH = 1 << HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH, - HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE = 1 << HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE, - HB_OT_LAYOUT_GLYPH_PROPS_MARK = 1 << HB_OT_LAYOUT_GLYPH_CLASS_MARK, - HB_OT_LAYOUT_GLYPH_PROPS_COMPONENT = 1 << HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT -} hb_ot_layout_glyph_class_mask_t; - - - -/* - * GSUB/GPOS - */ - -/* lig_id / lig_comp +/* lig_props: aka lig_id / lig_comp * * When a ligature is formed: * @@ -131,7 +255,9 @@ typedef enum { * - The marks get lig_comp > 0, reflecting which component of the ligature * they were applied to. * - This is used in GPOS to attach marks to the right component of a ligature - * in MarkLigPos. + * in MarkLigPos, + * - Note that when marks are ligated together, much of the above is skipped + * and the current lig_id reused. * * When a multiple-substitution is done: * @@ -141,156 +267,159 @@ typedef enum { * multiple substitution in MarkBasePos. * * The numbers are also used in GPOS to do mark-to-mark positioning only - * to marks that belong to the same component of a ligature in MarkMarPos. + * to marks that belong to the same component of the same ligature. */ + +static inline void +_hb_glyph_info_clear_lig_props (hb_glyph_info_t *info) +{ + info->lig_props() = 0; +} + #define IS_LIG_BASE 0x10 + static inline void -set_lig_props_for_ligature (hb_glyph_info_t &info, unsigned int lig_id, unsigned int lig_num_comps) +_hb_glyph_info_set_lig_props_for_ligature (hb_glyph_info_t *info, + unsigned int lig_id, + unsigned int lig_num_comps) { - info.lig_props() = (lig_id << 5) | IS_LIG_BASE | (lig_num_comps & 0x0F); + info->lig_props() = (lig_id << 5) | IS_LIG_BASE | (lig_num_comps & 0x0F); } + static inline void -set_lig_props_for_mark (hb_glyph_info_t &info, unsigned int lig_id, unsigned int lig_comp) +_hb_glyph_info_set_lig_props_for_mark (hb_glyph_info_t *info, + unsigned int lig_id, + unsigned int lig_comp) { - info.lig_props() = (lig_id << 5) | (lig_comp & 0x0F); + info->lig_props() = (lig_id << 5) | (lig_comp & 0x0F); } + static inline void -set_lig_props_for_component (hb_glyph_info_t &info, unsigned int comp) +_hb_glyph_info_set_lig_props_for_component (hb_glyph_info_t *info, unsigned int comp) { - set_lig_props_for_mark (info, 0, comp); + _hb_glyph_info_set_lig_props_for_mark (info, 0, comp); } static inline unsigned int -get_lig_id (const hb_glyph_info_t &info) +_hb_glyph_info_get_lig_id (const hb_glyph_info_t *info) { - return info.lig_props() >> 5; + return info->lig_props() >> 5; } + static inline bool -is_a_ligature (const hb_glyph_info_t &info) +_hb_glyph_info_ligated_internal (const hb_glyph_info_t *info) { - return !!(info.lig_props() & IS_LIG_BASE); + return !!(info->lig_props() & IS_LIG_BASE); } + static inline unsigned int -get_lig_comp (const hb_glyph_info_t &info) +_hb_glyph_info_get_lig_comp (const hb_glyph_info_t *info) { - if (is_a_ligature (info)) + if (_hb_glyph_info_ligated_internal (info)) return 0; else - return info.lig_props() & 0x0F; + return info->lig_props() & 0x0F; } + static inline unsigned int -get_lig_num_comps (const hb_glyph_info_t &info) +_hb_glyph_info_get_lig_num_comps (const hb_glyph_info_t *info) { - if ((info.glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE) && is_a_ligature (info)) - return info.lig_props() & 0x0F; + if ((info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE) && + _hb_glyph_info_ligated_internal (info)) + return info->lig_props() & 0x0F; else return 1; } -static inline uint8_t allocate_lig_id (hb_buffer_t *buffer) { +static inline uint8_t +_hb_allocate_lig_id (hb_buffer_t *buffer) { uint8_t lig_id = buffer->next_serial () & 0x07; if (unlikely (!lig_id)) - lig_id = allocate_lig_id (buffer); /* in case of overflow */ + lig_id = _hb_allocate_lig_id (buffer); /* in case of overflow */ return lig_id; } +/* glyph_props: */ -HB_INTERNAL hb_bool_t -hb_ot_layout_lookup_would_substitute_fast (hb_face_t *face, - unsigned int lookup_index, - const hb_codepoint_t *glyphs, - unsigned int glyphs_length, - hb_bool_t zero_context); - - -/* Should be called before all the substitute_lookup's are done. */ -HB_INTERNAL void -hb_ot_layout_substitute_start (hb_font_t *font, - hb_buffer_t *buffer); - - -struct hb_ot_layout_lookup_accelerator_t; - -namespace OT { - struct hb_apply_context_t; - struct SubstLookup; +inline void +_hb_glyph_info_set_glyph_props (hb_glyph_info_t *info, unsigned int props) +{ + info->glyph_props() = props; } -HB_INTERNAL void -hb_ot_layout_substitute_lookup (OT::hb_apply_context_t *c, - const OT::SubstLookup &lookup, - const hb_ot_layout_lookup_accelerator_t &accel); - - -/* Should be called after all the substitute_lookup's are done */ -HB_INTERNAL void -hb_ot_layout_substitute_finish (hb_font_t *font, - hb_buffer_t *buffer); - - -/* Should be called before all the position_lookup's are done. Resets positions to zero. */ -HB_INTERNAL void -hb_ot_layout_position_start (hb_font_t *font, - hb_buffer_t *buffer); - -/* Should be called after all the position_lookup's are done */ -HB_INTERNAL void -hb_ot_layout_position_finish (hb_font_t *font, - hb_buffer_t *buffer); - - - -/* - * hb_ot_layout_t - */ - -namespace OT { - struct GDEF; - struct GSUB; - struct GPOS; +inline unsigned int +_hb_glyph_info_get_glyph_props (const hb_glyph_info_t *info) +{ + return info->glyph_props(); } -struct hb_ot_layout_lookup_accelerator_t +inline bool +_hb_glyph_info_is_base_glyph (const hb_glyph_info_t *info) { - template <typename TLookup> - inline void init (const TLookup &lookup) - { - digest.init (); - lookup.add_coverage (&digest); - } + return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH); +} - template <typename TLookup> - inline void fini (const TLookup &lookup) - { - } +inline bool +_hb_glyph_info_is_ligature (const hb_glyph_info_t *info) +{ + return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE); +} - hb_set_digest_t digest; -}; +inline bool +_hb_glyph_info_is_mark (const hb_glyph_info_t *info) +{ + return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK); +} -struct hb_ot_layout_t +static inline bool +_hb_glyph_info_substituted (const hb_glyph_info_t *info) { - hb_blob_t *gdef_blob; - hb_blob_t *gsub_blob; - hb_blob_t *gpos_blob; + return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED); +} - const struct OT::GDEF *gdef; - const struct OT::GSUB *gsub; - const struct OT::GPOS *gpos; +static inline bool +_hb_glyph_info_ligated (const hb_glyph_info_t *info) +{ + return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATED); +} - unsigned int gsub_lookup_count; - unsigned int gpos_lookup_count; +/* Allocation / deallocation. */ - hb_ot_layout_lookup_accelerator_t *gsub_accels; - hb_ot_layout_lookup_accelerator_t *gpos_accels; -}; +inline void +_hb_buffer_allocate_unicode_vars (hb_buffer_t *buffer) +{ + HB_BUFFER_ALLOCATE_VAR (buffer, unicode_props0); + HB_BUFFER_ALLOCATE_VAR (buffer, unicode_props1); +} +inline void +_hb_buffer_deallocate_unicode_vars (hb_buffer_t *buffer) +{ + HB_BUFFER_DEALLOCATE_VAR (buffer, unicode_props0); + HB_BUFFER_DEALLOCATE_VAR (buffer, unicode_props1); +} -HB_INTERNAL hb_ot_layout_t * -_hb_ot_layout_create (hb_face_t *face); +inline void +_hb_buffer_allocate_gsubgpos_vars (hb_buffer_t *buffer) +{ + HB_BUFFER_ALLOCATE_VAR (buffer, glyph_props); + HB_BUFFER_ALLOCATE_VAR (buffer, lig_props); + HB_BUFFER_ALLOCATE_VAR (buffer, syllable); +} -HB_INTERNAL void -_hb_ot_layout_destroy (hb_ot_layout_t *layout); +inline void +_hb_buffer_deallocate_gsubgpos_vars (hb_buffer_t *buffer) +{ + HB_BUFFER_DEALLOCATE_VAR (buffer, syllable); + HB_BUFFER_DEALLOCATE_VAR (buffer, lig_props); + HB_BUFFER_DEALLOCATE_VAR (buffer, glyph_props); +} +/* Make sure no one directly touches our props... */ +#undef unicode_props0 +#undef unicode_props1 +#undef lig_props +#undef glyph_props #endif /* HB_OT_LAYOUT_PRIVATE_HH */ diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout.cc index 07c093f8f4f..183726e63cf 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout.cc @@ -429,6 +429,7 @@ hb_ot_layout_table_get_lookup_count (hb_face_t *face, return hb_ot_layout_from_face (face)->gpos_lookup_count; } } + return 0; } static void @@ -782,6 +783,7 @@ hb_ot_layout_get_size_params (hb_face_t *face, struct GSUBProxy { static const unsigned int table_index = 0; + static const bool inplace = false; typedef OT::SubstLookup Lookup; GSUBProxy (hb_face_t *face) : @@ -795,6 +797,7 @@ struct GSUBProxy struct GPOSProxy { static const unsigned int table_index = 1; + static const bool inplace = true; typedef OT::PosLookup Lookup; GPOSProxy (hb_face_t *face) : @@ -822,10 +825,9 @@ apply_string (OT::hb_apply_context_t *c, const hb_ot_layout_lookup_accelerator_t &accel) { bool ret = false; - OT::hb_is_inplace_context_t inplace_c (c->face); - bool inplace = lookup.is_inplace (&inplace_c); + hb_buffer_t *buffer = c->buffer; - if (unlikely (!c->buffer->len || !c->lookup_mask)) + if (unlikely (!buffer->len || !c->lookup_mask)) return false; c->set_lookup (lookup); @@ -834,43 +836,43 @@ apply_string (OT::hb_apply_context_t *c, { /* in/out forward substitution/positioning */ if (Proxy::table_index == 0) - c->buffer->clear_output (); - c->buffer->idx = 0; + buffer->clear_output (); + buffer->idx = 0; - while (c->buffer->idx < c->buffer->len) + while (buffer->idx < buffer->len) { - if (accel.digest.may_have (c->buffer->cur().codepoint) && - (c->buffer->cur().mask & c->lookup_mask) && + if (accel.digest.may_have (buffer->cur().codepoint) && + (buffer->cur().mask & c->lookup_mask) && apply_once (c, lookup)) ret = true; else - c->buffer->next_glyph (); + buffer->next_glyph (); } if (ret) { - if (!inplace) - c->buffer->swap_buffers (); + if (!Proxy::inplace) + buffer->swap_buffers (); else - assert (!c->buffer->has_separate_output ()); + assert (!buffer->has_separate_output ()); } } else { /* in-place backward substitution/positioning */ if (Proxy::table_index == 0) - c->buffer->remove_output (); - c->buffer->idx = c->buffer->len - 1; + buffer->remove_output (); + buffer->idx = buffer->len - 1; do { - if (accel.digest.may_have (c->buffer->cur().codepoint) && - (c->buffer->cur().mask & c->lookup_mask) && + if (accel.digest.may_have (buffer->cur().codepoint) && + (buffer->cur().mask & c->lookup_mask) && apply_once (c, lookup)) ret = true; - else - c->buffer->idx--; + /* The reverse lookup doesn't "advance" cursor (for good reason). */ + buffer->idx--; } - while ((int) c->buffer->idx >= 0); + while ((int) buffer->idx >= 0); } return ret; diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout.h index dfc7f2446f7..dfc7f2446f7 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-layout.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-layout.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-map-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-map-private.hh index 0e718a6f1f5..0e718a6f1f5 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-map-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-map-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-map.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-map.cc index 17dc934e2fa..17dc934e2fa 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-map.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-map.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-maxp-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-maxp-table.hh index e6d255579c6..e6d255579c6 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-maxp-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-maxp-table.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-name-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-name-table.hh index 07dc0565ca6..07dc0565ca6 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-name-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-name-table.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-arabic-fallback.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-arabic-fallback.hh index 6b2b87e3f28..6b2b87e3f28 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-arabic-fallback.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-arabic-fallback.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-arabic-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-arabic-table.hh index 730a275bf0a..730a275bf0a 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-arabic-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-arabic-table.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-arabic.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-arabic.cc index a57e81a5ecf..4f6c86e8ee5 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-arabic.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-arabic.cc @@ -157,6 +157,11 @@ static const struct arabic_state_table_entry { static void +nuke_joiners (const hb_ot_shape_plan_t *plan, + hb_font_t *font, + hb_buffer_t *buffer); + +static void arabic_fallback_shape (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer); @@ -176,6 +181,8 @@ collect_features_arabic (hb_ot_shape_planner_t *plan) * TODO: Add test cases for these two. */ + map->add_gsub_pause (nuke_joiners); + map->add_global_bool_feature (HB_TAG('c','c','m','p')); map->add_global_bool_feature (HB_TAG('l','o','c','l')); @@ -273,7 +280,8 @@ arabic_joining (hb_buffer_t *buffer) const arabic_state_table_entry *entry = &arabic_state_table[state][this_type]; if (entry->prev_action != NONE && prev != (unsigned int) -1) - buffer->info[prev].arabic_shaping_action() = entry->prev_action; + for (; prev < i; prev++) + buffer->info[prev].arabic_shaping_action() = entry->prev_action; buffer->info[i].arabic_shaping_action() = entry->curr_action; @@ -314,6 +322,17 @@ setup_masks_arabic (const hb_ot_shape_plan_t *plan, static void +nuke_joiners (const hb_ot_shape_plan_t *plan HB_UNUSED, + hb_font_t *font HB_UNUSED, + hb_buffer_t *buffer) +{ + unsigned int count = buffer->len; + for (unsigned int i = 0; i < count; i++) + if (_hb_glyph_info_is_zwj (&buffer->info[i])) + _hb_glyph_info_flip_joiners (&buffer->info[i]); +} + +static void arabic_fallback_shape (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-default.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-default.cc index d6afa0e1c11..d6afa0e1c11 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-default.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-default.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic-machine.hh new file mode 100644 index 00000000000..747315b7a2a --- /dev/null +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic-machine.hh @@ -0,0 +1,1824 @@ + +#line 1 "../../src/hb-ot-shape-complex-indic-machine.rl" +/* + * Copyright © 2011,2012 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#ifndef HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH +#define HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH + +#include "hb-private.hh" + + +#line 36 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp" +static const unsigned char _indic_syllable_machine_trans_keys[] = { + 1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, + 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 4u, 4u, 6u, 6u, + 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, + 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, + 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, + 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, + 5u, 7u, 7u, 7u, 4u, 4u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, + 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, + 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, + 1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, + 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 4u, 4u, 6u, 6u, + 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, + 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, + 4u, 14u, 4u, 14u, 4u, 14u, 1u, 16u, 13u, 13u, 5u, 7u, 5u, 7u, 7u, 7u, + 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, + 7u, 7u, 4u, 4u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, + 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 14u, 4u, 14u, 4u, 14u, + 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, 4u, 14u, + 4u, 14u, 5u, 7u, 5u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u, + 7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 1u, 16u, 13u, 13u, 4u, 4u, 6u, 6u, + 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, + 6u, 6u, 16u, 16u, 1u, 31u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, + 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, + 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 18u, 8u, 18u, + 5u, 10u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 18u, 3u, 18u, 8u, 18u, + 3u, 10u, 8u, 10u, 3u, 18u, 3u, 18u, 3u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, + 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, + 6u, 18u, 3u, 18u, 1u, 18u, 4u, 31u, 4u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, + 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, + 1u, 18u, 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u, + 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u, + 1u, 18u, 3u, 31u, 3u, 31u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, + 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, + 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 18u, 8u, 18u, + 5u, 10u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 18u, 3u, 18u, 8u, 18u, + 3u, 10u, 8u, 10u, 3u, 18u, 3u, 18u, 3u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, + 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, + 6u, 18u, 3u, 18u, 1u, 18u, 4u, 31u, 4u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, + 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, + 1u, 18u, 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u, + 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u, + 4u, 14u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, + 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, + 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 18u, 8u, 18u, 5u, 10u, + 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 18u, 3u, 18u, 8u, 18u, 3u, 10u, + 8u, 10u, 3u, 18u, 3u, 18u, 3u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, + 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, 6u, 18u, + 3u, 18u, 1u, 18u, 4u, 31u, 4u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, + 1u, 18u, 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u, + 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u, + 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u, + 4u, 14u, 3u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, + 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, + 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 18u, 8u, 18u, + 5u, 10u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 18u, 3u, 18u, 8u, 18u, + 3u, 10u, 8u, 10u, 3u, 18u, 3u, 18u, 3u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, + 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, + 6u, 18u, 3u, 18u, 1u, 18u, 4u, 31u, 4u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, + 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, + 1u, 18u, 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u, + 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u, + 1u, 18u, 3u, 31u, 1u, 31u, 3u, 31u, 1u, 31u, 4u, 18u, 1u, 18u, 3u, 31u, + 3u, 31u, 4u, 31u, 5u, 10u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 10u, + 8u, 10u, 3u, 31u, 3u, 31u, 1u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, + 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, 8u, 18u, + 3u, 18u, 3u, 18u, 8u, 18u, 3u, 18u, 3u, 18u, 1u, 18u, 3u, 10u, 8u, 10u, + 5u, 10u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 0 +}; + +static const char _indic_syllable_machine_key_spans[] = { + 16, 1, 3, 3, 1, 3, 3, 1, + 3, 3, 1, 3, 3, 1, 1, 1, + 1, 4, 1, 1, 4, 1, 1, 4, + 1, 1, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 16, 1, 3, 3, + 1, 3, 3, 1, 3, 3, 1, 3, + 3, 1, 1, 1, 1, 4, 1, 1, + 4, 1, 1, 4, 1, 1, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 16, 1, 3, 3, 1, 3, 3, 1, + 3, 3, 1, 3, 3, 1, 1, 1, + 1, 4, 1, 1, 4, 1, 1, 4, + 1, 1, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 16, 1, 3, 3, 1, + 3, 3, 1, 3, 3, 1, 3, 3, + 1, 1, 1, 1, 4, 1, 1, 4, + 1, 1, 4, 1, 1, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 3, 3, 3, 3, 1, 3, 3, + 1, 3, 3, 1, 16, 1, 1, 1, + 1, 4, 1, 1, 4, 1, 1, 4, + 1, 1, 31, 29, 29, 28, 18, 29, + 29, 28, 18, 29, 29, 28, 18, 29, + 29, 28, 18, 29, 29, 28, 14, 11, + 6, 2, 2, 1, 6, 16, 16, 11, + 8, 3, 16, 16, 16, 16, 15, 14, + 16, 15, 14, 16, 15, 14, 16, 15, + 13, 16, 18, 28, 15, 29, 29, 18, + 18, 18, 18, 18, 29, 29, 18, 18, + 18, 18, 18, 29, 29, 18, 18, 18, + 18, 18, 29, 29, 18, 18, 18, 18, + 18, 29, 29, 29, 29, 28, 18, 29, + 29, 28, 18, 29, 29, 28, 18, 29, + 29, 28, 18, 29, 29, 28, 14, 11, + 6, 2, 2, 1, 6, 16, 16, 11, + 8, 3, 16, 16, 16, 16, 15, 14, + 16, 15, 14, 16, 15, 14, 16, 15, + 13, 16, 18, 28, 15, 29, 29, 18, + 18, 18, 18, 18, 29, 29, 18, 18, + 18, 18, 18, 29, 29, 18, 18, 18, + 18, 18, 29, 29, 18, 18, 18, 18, + 11, 18, 29, 29, 28, 18, 29, 29, + 28, 18, 29, 29, 28, 18, 29, 29, + 28, 18, 29, 29, 28, 14, 11, 6, + 2, 2, 1, 6, 16, 16, 11, 8, + 3, 16, 16, 16, 16, 15, 14, 16, + 15, 14, 16, 15, 14, 16, 15, 13, + 16, 18, 28, 15, 29, 29, 18, 18, + 18, 18, 18, 29, 29, 18, 18, 18, + 18, 18, 29, 29, 18, 18, 18, 18, + 18, 29, 29, 18, 18, 18, 18, 18, + 11, 29, 11, 29, 29, 28, 18, 29, + 29, 28, 18, 29, 29, 28, 18, 29, + 29, 28, 18, 29, 29, 28, 14, 11, + 6, 2, 2, 1, 6, 16, 16, 11, + 8, 3, 16, 16, 16, 16, 15, 14, + 16, 15, 14, 16, 15, 14, 16, 15, + 13, 16, 18, 28, 15, 29, 29, 18, + 18, 18, 18, 18, 29, 29, 18, 18, + 18, 18, 18, 29, 29, 18, 18, 18, + 18, 18, 29, 29, 18, 18, 18, 18, + 18, 29, 31, 29, 31, 15, 18, 29, + 29, 28, 6, 2, 2, 1, 6, 8, + 3, 29, 29, 18, 16, 15, 14, 16, + 15, 14, 16, 15, 14, 16, 15, 11, + 16, 16, 11, 16, 16, 18, 8, 3, + 6, 2, 2, 1, 6 +}; + +static const short _indic_syllable_machine_index_offsets[] = { + 0, 17, 19, 23, 27, 29, 33, 37, + 39, 43, 47, 49, 53, 57, 59, 61, + 63, 65, 70, 72, 74, 79, 81, 83, + 88, 90, 92, 104, 116, 128, 140, 152, + 164, 176, 188, 200, 212, 229, 231, 235, + 239, 241, 245, 249, 251, 255, 259, 261, + 265, 269, 271, 273, 275, 277, 282, 284, + 286, 291, 293, 295, 300, 302, 304, 316, + 328, 340, 352, 364, 376, 388, 400, 412, + 424, 441, 443, 447, 451, 453, 457, 461, + 463, 467, 471, 473, 477, 481, 483, 485, + 487, 489, 494, 496, 498, 503, 505, 507, + 512, 514, 516, 528, 540, 552, 564, 576, + 588, 600, 612, 624, 641, 643, 647, 651, + 653, 657, 661, 663, 667, 671, 673, 677, + 681, 683, 685, 687, 689, 694, 696, 698, + 703, 705, 707, 712, 714, 716, 728, 740, + 752, 764, 776, 788, 800, 812, 824, 836, + 848, 860, 864, 868, 872, 876, 878, 882, + 886, 888, 892, 896, 898, 915, 917, 919, + 921, 923, 928, 930, 932, 937, 939, 941, + 946, 948, 950, 982, 1012, 1042, 1071, 1090, + 1120, 1150, 1179, 1198, 1228, 1258, 1287, 1306, + 1336, 1366, 1395, 1414, 1444, 1474, 1503, 1518, + 1530, 1537, 1540, 1543, 1545, 1552, 1569, 1586, + 1598, 1607, 1611, 1628, 1645, 1662, 1679, 1695, + 1710, 1727, 1743, 1758, 1775, 1791, 1806, 1823, + 1839, 1853, 1870, 1889, 1918, 1934, 1964, 1994, + 2013, 2032, 2051, 2070, 2089, 2119, 2149, 2168, + 2187, 2206, 2225, 2244, 2274, 2304, 2323, 2342, + 2361, 2380, 2399, 2429, 2459, 2478, 2497, 2516, + 2535, 2554, 2584, 2614, 2644, 2674, 2703, 2722, + 2752, 2782, 2811, 2830, 2860, 2890, 2919, 2938, + 2968, 2998, 3027, 3046, 3076, 3106, 3135, 3150, + 3162, 3169, 3172, 3175, 3177, 3184, 3201, 3218, + 3230, 3239, 3243, 3260, 3277, 3294, 3311, 3327, + 3342, 3359, 3375, 3390, 3407, 3423, 3438, 3455, + 3471, 3485, 3502, 3521, 3550, 3566, 3596, 3626, + 3645, 3664, 3683, 3702, 3721, 3751, 3781, 3800, + 3819, 3838, 3857, 3876, 3906, 3936, 3955, 3974, + 3993, 4012, 4031, 4061, 4091, 4110, 4129, 4148, + 4167, 4179, 4198, 4228, 4258, 4287, 4306, 4336, + 4366, 4395, 4414, 4444, 4474, 4503, 4522, 4552, + 4582, 4611, 4630, 4660, 4690, 4719, 4734, 4746, + 4753, 4756, 4759, 4761, 4768, 4785, 4802, 4814, + 4823, 4827, 4844, 4861, 4878, 4895, 4911, 4926, + 4943, 4959, 4974, 4991, 5007, 5022, 5039, 5055, + 5069, 5086, 5105, 5134, 5150, 5180, 5210, 5229, + 5248, 5267, 5286, 5305, 5335, 5365, 5384, 5403, + 5422, 5441, 5460, 5490, 5520, 5539, 5558, 5577, + 5596, 5615, 5645, 5675, 5694, 5713, 5732, 5751, + 5770, 5782, 5812, 5824, 5854, 5884, 5913, 5932, + 5962, 5992, 6021, 6040, 6070, 6100, 6129, 6148, + 6178, 6208, 6237, 6256, 6286, 6316, 6345, 6360, + 6372, 6379, 6382, 6385, 6387, 6394, 6411, 6428, + 6440, 6449, 6453, 6470, 6487, 6504, 6521, 6537, + 6552, 6569, 6585, 6600, 6617, 6633, 6648, 6665, + 6681, 6695, 6712, 6731, 6760, 6776, 6806, 6836, + 6855, 6874, 6893, 6912, 6931, 6961, 6991, 7010, + 7029, 7048, 7067, 7086, 7116, 7146, 7165, 7184, + 7203, 7222, 7241, 7271, 7301, 7320, 7339, 7358, + 7377, 7396, 7426, 7458, 7488, 7520, 7536, 7555, + 7585, 7615, 7644, 7651, 7654, 7657, 7659, 7666, + 7675, 7679, 7709, 7739, 7758, 7775, 7791, 7806, + 7823, 7839, 7854, 7871, 7887, 7902, 7919, 7935, + 7947, 7964, 7981, 7993, 8010, 8027, 8046, 8055, + 8059, 8066, 8069, 8072, 8074 +}; + +static const short _indic_syllable_machine_indicies[] = { + 1, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, + 0, 3, 0, 4, 4, 5, 0, 6, + 6, 5, 0, 5, 0, 7, 7, 8, + 0, 9, 9, 8, 0, 8, 0, 10, + 10, 11, 0, 12, 12, 11, 0, 11, + 0, 13, 13, 14, 0, 15, 15, 14, + 0, 14, 0, 16, 0, 17, 0, 18, + 0, 19, 13, 13, 14, 0, 20, 0, + 21, 0, 22, 10, 10, 11, 0, 23, + 0, 24, 0, 25, 7, 7, 8, 0, + 26, 0, 27, 0, 28, 4, 4, 5, + 0, 0, 0, 0, 0, 0, 28, 0, + 28, 4, 4, 5, 0, 0, 0, 0, + 0, 29, 28, 0, 30, 4, 4, 5, + 0, 0, 0, 0, 0, 0, 30, 0, + 30, 4, 4, 5, 0, 0, 0, 0, + 0, 31, 30, 0, 32, 4, 4, 5, + 0, 0, 0, 0, 0, 0, 32, 0, + 32, 4, 4, 5, 0, 0, 0, 0, + 0, 33, 32, 0, 34, 4, 4, 5, + 0, 0, 0, 0, 0, 0, 34, 0, + 34, 4, 4, 5, 0, 0, 0, 0, + 0, 35, 34, 0, 36, 4, 4, 5, + 0, 0, 0, 0, 0, 0, 36, 0, + 36, 4, 4, 5, 0, 0, 0, 0, + 0, 37, 36, 0, 39, 40, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 39, 38, 41, 38, 42, + 42, 43, 38, 44, 44, 43, 38, 43, + 38, 45, 45, 46, 38, 47, 47, 46, + 38, 46, 38, 48, 48, 49, 38, 50, + 50, 49, 38, 49, 38, 51, 51, 52, + 38, 53, 53, 52, 38, 52, 38, 54, + 38, 55, 38, 56, 38, 57, 51, 51, + 52, 38, 58, 38, 59, 38, 60, 48, + 48, 49, 38, 61, 38, 62, 38, 63, + 45, 45, 46, 38, 64, 38, 65, 38, + 66, 42, 42, 43, 38, 38, 38, 38, + 38, 38, 66, 38, 66, 42, 42, 43, + 38, 38, 38, 38, 38, 67, 66, 38, + 68, 42, 42, 43, 38, 38, 38, 38, + 38, 38, 68, 38, 68, 42, 42, 43, + 38, 38, 38, 38, 38, 69, 68, 38, + 70, 42, 42, 43, 38, 38, 38, 38, + 38, 38, 70, 38, 70, 42, 42, 43, + 38, 38, 38, 38, 38, 71, 70, 38, + 72, 42, 42, 43, 38, 38, 38, 38, + 38, 38, 72, 38, 72, 42, 42, 43, + 38, 38, 38, 38, 38, 73, 72, 38, + 74, 42, 42, 43, 38, 38, 38, 38, + 38, 38, 74, 38, 74, 42, 42, 43, + 38, 38, 38, 38, 38, 75, 74, 38, + 77, 78, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 77, + 76, 79, 76, 80, 80, 81, 76, 83, + 83, 81, 82, 81, 82, 84, 84, 85, + 76, 86, 86, 85, 76, 85, 76, 87, + 87, 88, 76, 89, 89, 88, 76, 88, + 76, 90, 90, 91, 76, 92, 92, 91, + 76, 91, 76, 93, 76, 94, 76, 95, + 76, 96, 90, 90, 91, 76, 97, 76, + 98, 76, 99, 87, 87, 88, 76, 100, + 76, 101, 76, 102, 84, 84, 85, 76, + 103, 76, 104, 76, 105, 80, 80, 81, + 76, 76, 76, 76, 76, 76, 105, 76, + 105, 80, 80, 81, 76, 76, 76, 76, + 76, 106, 105, 76, 107, 80, 80, 81, + 76, 76, 76, 76, 76, 76, 107, 76, + 107, 80, 80, 81, 76, 76, 76, 76, + 76, 108, 107, 76, 109, 80, 80, 81, + 76, 76, 76, 76, 76, 76, 109, 76, + 109, 80, 80, 81, 76, 76, 76, 76, + 76, 110, 109, 76, 111, 80, 80, 81, + 82, 82, 82, 82, 82, 82, 111, 82, + 111, 80, 80, 81, 76, 76, 76, 76, + 76, 112, 111, 76, 113, 80, 80, 81, + 76, 76, 76, 76, 76, 76, 113, 76, + 115, 116, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 115, + 114, 117, 114, 118, 118, 119, 114, 120, + 120, 119, 114, 119, 114, 121, 121, 122, + 114, 123, 123, 122, 114, 122, 114, 124, + 124, 125, 114, 126, 126, 125, 114, 125, + 114, 127, 127, 128, 114, 129, 129, 128, + 114, 128, 114, 130, 114, 131, 114, 132, + 114, 133, 127, 127, 128, 114, 134, 114, + 135, 114, 136, 124, 124, 125, 114, 137, + 114, 138, 114, 139, 121, 121, 122, 114, + 140, 114, 141, 114, 142, 118, 118, 119, + 114, 114, 114, 114, 114, 114, 142, 114, + 142, 118, 118, 119, 114, 114, 114, 114, + 114, 143, 142, 114, 144, 118, 118, 119, + 114, 114, 114, 114, 114, 114, 144, 114, + 144, 118, 118, 119, 114, 114, 114, 114, + 114, 145, 144, 114, 146, 118, 118, 119, + 114, 114, 114, 114, 114, 114, 146, 114, + 146, 118, 118, 119, 114, 114, 114, 114, + 114, 147, 146, 114, 148, 118, 118, 119, + 114, 114, 114, 114, 114, 114, 148, 114, + 148, 118, 118, 119, 114, 114, 114, 114, + 114, 149, 148, 114, 150, 118, 118, 119, + 114, 114, 114, 114, 114, 114, 150, 114, + 150, 118, 118, 119, 114, 114, 114, 114, + 114, 151, 150, 114, 113, 80, 80, 81, + 76, 76, 76, 76, 76, 152, 113, 76, + 111, 80, 80, 81, 0, 0, 0, 0, + 0, 153, 111, 0, 154, 154, 155, 0, + 6, 6, 155, 0, 156, 156, 157, 0, + 158, 158, 157, 0, 157, 0, 159, 159, + 160, 0, 161, 161, 160, 0, 160, 0, + 162, 162, 163, 0, 164, 164, 163, 0, + 163, 0, 165, 166, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 165, 0, 167, 0, 168, 0, 169, + 0, 170, 0, 171, 162, 162, 163, 0, + 172, 0, 173, 0, 174, 159, 159, 160, + 0, 175, 0, 176, 0, 177, 156, 156, + 157, 0, 178, 0, 179, 0, 181, 182, + 183, 184, 185, 186, 81, 187, 188, 189, + 190, 190, 152, 191, 192, 193, 194, 195, + 180, 180, 180, 180, 180, 180, 180, 180, + 180, 180, 180, 180, 196, 180, 198, 199, + 200, 201, 5, 202, 203, 204, 197, 197, + 37, 205, 197, 197, 206, 207, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 208, 197, 209, 199, 210, 210, + 5, 202, 203, 204, 197, 197, 197, 205, + 197, 197, 206, 207, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 208, 197, 199, 210, 210, 5, 202, 203, + 204, 197, 197, 197, 205, 197, 197, 206, + 207, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 208, 197, 211, + 197, 197, 197, 18, 212, 197, 202, 203, + 204, 197, 197, 197, 213, 197, 211, 197, + 207, 197, 214, 215, 216, 217, 5, 202, + 203, 204, 197, 197, 35, 218, 197, 197, + 206, 207, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 208, 197, + 219, 215, 220, 220, 5, 202, 203, 204, + 197, 197, 197, 218, 197, 197, 206, 207, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 208, 197, 215, 220, + 220, 5, 202, 203, 204, 197, 197, 197, + 218, 197, 197, 206, 207, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 208, 197, 221, 197, 197, 197, 18, + 222, 197, 202, 203, 204, 197, 197, 197, + 213, 197, 221, 197, 207, 197, 223, 224, + 225, 226, 5, 202, 203, 204, 197, 197, + 33, 227, 197, 197, 206, 207, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 208, 197, 228, 224, 229, 229, + 5, 202, 203, 204, 197, 197, 197, 227, + 197, 197, 206, 207, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 208, 197, 224, 229, 229, 5, 202, 203, + 204, 197, 197, 197, 227, 197, 197, 206, + 207, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 208, 197, 230, + 197, 197, 197, 18, 231, 197, 202, 203, + 204, 197, 197, 197, 213, 197, 230, 197, + 207, 197, 232, 233, 234, 235, 5, 202, + 203, 204, 197, 197, 31, 236, 197, 197, + 206, 207, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 208, 197, + 237, 233, 238, 238, 5, 202, 203, 204, + 197, 197, 197, 236, 197, 197, 206, 207, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 208, 197, 233, 238, + 238, 5, 202, 203, 204, 197, 197, 197, + 236, 197, 197, 206, 207, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 208, 197, 239, 197, 197, 197, 18, + 240, 197, 202, 203, 204, 197, 197, 197, + 213, 197, 239, 197, 207, 197, 241, 242, + 243, 244, 5, 202, 203, 204, 197, 197, + 29, 245, 197, 197, 206, 207, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 208, 197, 246, 242, 247, 247, + 5, 202, 203, 204, 197, 197, 197, 245, + 197, 197, 206, 207, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 208, 197, 242, 247, 247, 5, 202, 203, + 204, 197, 197, 197, 245, 197, 197, 206, + 207, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 208, 197, 18, + 248, 197, 202, 203, 204, 197, 197, 197, + 213, 197, 197, 197, 207, 197, 202, 203, + 204, 197, 197, 197, 213, 197, 197, 197, + 207, 197, 249, 197, 197, 250, 203, 204, + 197, 203, 204, 197, 203, 251, 197, 203, + 197, 249, 197, 197, 197, 203, 204, 197, + 252, 197, 253, 254, 197, 202, 203, 204, + 197, 197, 3, 197, 197, 197, 197, 207, + 197, 2, 197, 197, 197, 197, 202, 203, + 204, 197, 197, 197, 197, 197, 197, 197, + 207, 197, 202, 203, 204, 197, 197, 197, + 197, 197, 197, 197, 207, 197, 255, 197, + 197, 197, 197, 202, 203, 204, 197, 202, + 203, 204, 197, 252, 197, 197, 197, 197, + 202, 203, 204, 197, 197, 197, 197, 197, + 197, 197, 207, 197, 252, 197, 253, 197, + 197, 202, 203, 204, 197, 197, 3, 197, + 197, 197, 197, 207, 197, 18, 197, 256, + 256, 5, 202, 203, 204, 197, 197, 197, + 213, 197, 197, 197, 207, 197, 257, 27, + 258, 259, 8, 202, 203, 204, 197, 197, + 197, 213, 197, 197, 197, 207, 197, 27, + 258, 259, 8, 202, 203, 204, 197, 197, + 197, 213, 197, 197, 197, 207, 197, 258, + 258, 8, 202, 203, 204, 197, 197, 197, + 213, 197, 197, 197, 207, 197, 260, 24, + 261, 262, 11, 202, 203, 204, 197, 197, + 197, 213, 197, 197, 197, 207, 197, 24, + 261, 262, 11, 202, 203, 204, 197, 197, + 197, 213, 197, 197, 197, 207, 197, 261, + 261, 11, 202, 203, 204, 197, 197, 197, + 213, 197, 197, 197, 207, 197, 263, 21, + 264, 265, 14, 202, 203, 204, 197, 197, + 197, 213, 197, 197, 197, 207, 197, 21, + 264, 265, 14, 202, 203, 204, 197, 197, + 197, 213, 197, 197, 197, 207, 197, 264, + 264, 14, 202, 203, 204, 197, 197, 197, + 213, 197, 197, 197, 207, 197, 266, 18, + 197, 267, 197, 202, 203, 204, 197, 197, + 197, 213, 197, 197, 197, 207, 197, 18, + 197, 267, 197, 202, 203, 204, 197, 197, + 197, 213, 197, 197, 197, 207, 197, 268, + 197, 202, 203, 204, 197, 197, 197, 213, + 197, 197, 197, 207, 197, 18, 197, 197, + 197, 197, 202, 203, 204, 197, 197, 197, + 213, 197, 197, 197, 207, 197, 1, 2, + 197, 197, 18, 248, 197, 202, 203, 204, + 197, 197, 197, 213, 197, 1, 197, 207, + 197, 242, 247, 247, 5, 202, 203, 204, + 197, 197, 197, 245, 197, 197, 197, 207, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 208, 197, 242, 247, + 247, 5, 202, 203, 204, 197, 197, 197, + 245, 197, 197, 197, 207, 197, 241, 242, + 247, 247, 5, 202, 203, 204, 197, 197, + 197, 245, 197, 197, 206, 207, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 208, 197, 241, 242, 243, 247, + 5, 202, 203, 204, 197, 197, 29, 245, + 197, 197, 206, 207, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 208, 197, 239, 197, 269, 197, 256, 256, + 5, 202, 203, 204, 197, 197, 197, 213, + 197, 239, 197, 207, 197, 239, 197, 197, + 197, 197, 197, 197, 202, 203, 204, 197, + 197, 197, 213, 197, 239, 197, 207, 197, + 239, 197, 197, 197, 197, 270, 197, 202, + 203, 204, 197, 197, 197, 213, 197, 239, + 197, 207, 197, 239, 197, 269, 197, 197, + 197, 197, 202, 203, 204, 197, 197, 197, + 213, 197, 239, 197, 207, 197, 239, 2, + 197, 197, 18, 240, 197, 202, 203, 204, + 197, 197, 197, 213, 197, 239, 197, 207, + 197, 232, 233, 238, 238, 5, 202, 203, + 204, 197, 197, 197, 236, 197, 197, 206, + 207, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 208, 197, 232, + 233, 234, 238, 5, 202, 203, 204, 197, + 197, 31, 236, 197, 197, 206, 207, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 208, 197, 230, 197, 271, + 197, 256, 256, 5, 202, 203, 204, 197, + 197, 197, 213, 197, 230, 197, 207, 197, + 230, 197, 197, 197, 197, 197, 197, 202, + 203, 204, 197, 197, 197, 213, 197, 230, + 197, 207, 197, 230, 197, 197, 197, 197, + 272, 197, 202, 203, 204, 197, 197, 197, + 213, 197, 230, 197, 207, 197, 230, 197, + 271, 197, 197, 197, 197, 202, 203, 204, + 197, 197, 197, 213, 197, 230, 197, 207, + 197, 230, 2, 197, 197, 18, 231, 197, + 202, 203, 204, 197, 197, 197, 213, 197, + 230, 197, 207, 197, 223, 224, 229, 229, + 5, 202, 203, 204, 197, 197, 197, 227, + 197, 197, 206, 207, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 208, 197, 223, 224, 225, 229, 5, 202, + 203, 204, 197, 197, 33, 227, 197, 197, + 206, 207, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 208, 197, + 221, 197, 273, 197, 256, 256, 5, 202, + 203, 204, 197, 197, 197, 213, 197, 221, + 197, 207, 197, 221, 197, 197, 197, 197, + 197, 197, 202, 203, 204, 197, 197, 197, + 213, 197, 221, 197, 207, 197, 221, 197, + 197, 197, 197, 274, 197, 202, 203, 204, + 197, 197, 197, 213, 197, 221, 197, 207, + 197, 221, 197, 273, 197, 197, 197, 197, + 202, 203, 204, 197, 197, 197, 213, 197, + 221, 197, 207, 197, 221, 2, 197, 197, + 18, 222, 197, 202, 203, 204, 197, 197, + 197, 213, 197, 221, 197, 207, 197, 214, + 215, 220, 220, 5, 202, 203, 204, 197, + 197, 197, 218, 197, 197, 206, 207, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 208, 197, 214, 215, 216, + 220, 5, 202, 203, 204, 197, 197, 35, + 218, 197, 197, 206, 207, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 208, 197, 211, 197, 275, 197, 256, + 256, 5, 202, 203, 204, 197, 197, 197, + 213, 197, 211, 197, 207, 197, 211, 197, + 197, 197, 197, 197, 197, 202, 203, 204, + 197, 197, 197, 213, 197, 211, 197, 207, + 197, 211, 197, 197, 197, 197, 276, 197, + 202, 203, 204, 197, 197, 197, 213, 197, + 211, 197, 207, 197, 211, 197, 275, 197, + 197, 197, 197, 202, 203, 204, 197, 197, + 197, 213, 197, 211, 197, 207, 197, 211, + 2, 197, 197, 18, 212, 197, 202, 203, + 204, 197, 197, 197, 213, 197, 211, 197, + 207, 197, 198, 199, 210, 210, 5, 202, + 203, 204, 197, 197, 197, 205, 197, 197, + 206, 207, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 208, 197, + 198, 199, 200, 210, 5, 202, 203, 204, + 197, 197, 37, 205, 197, 197, 206, 207, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 208, 197, 278, 279, + 280, 281, 43, 282, 283, 284, 277, 277, + 75, 285, 277, 277, 286, 287, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 288, 277, 289, 279, 290, 281, + 43, 282, 283, 284, 277, 277, 277, 285, + 277, 277, 286, 287, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 288, 277, 279, 290, 281, 43, 282, 283, + 284, 277, 277, 277, 285, 277, 277, 286, + 287, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 288, 277, 291, + 277, 277, 277, 56, 292, 277, 282, 283, + 284, 277, 277, 277, 293, 277, 291, 277, + 287, 277, 294, 295, 296, 297, 43, 282, + 283, 284, 277, 277, 73, 298, 277, 277, + 286, 287, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 288, 277, + 299, 295, 300, 300, 43, 282, 283, 284, + 277, 277, 277, 298, 277, 277, 286, 287, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 288, 277, 295, 300, + 300, 43, 282, 283, 284, 277, 277, 277, + 298, 277, 277, 286, 287, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 288, 277, 301, 277, 277, 277, 56, + 302, 277, 282, 283, 284, 277, 277, 277, + 293, 277, 301, 277, 287, 277, 303, 304, + 305, 306, 43, 282, 283, 284, 277, 277, + 71, 307, 277, 277, 286, 287, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 288, 277, 308, 304, 309, 309, + 43, 282, 283, 284, 277, 277, 277, 307, + 277, 277, 286, 287, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 288, 277, 304, 309, 309, 43, 282, 283, + 284, 277, 277, 277, 307, 277, 277, 286, + 287, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 288, 277, 310, + 277, 277, 277, 56, 311, 277, 282, 283, + 284, 277, 277, 277, 293, 277, 310, 277, + 287, 277, 312, 313, 314, 315, 43, 282, + 283, 284, 277, 277, 69, 316, 277, 277, + 286, 287, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 288, 277, + 317, 313, 318, 318, 43, 282, 283, 284, + 277, 277, 277, 316, 277, 277, 286, 287, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 288, 277, 313, 318, + 318, 43, 282, 283, 284, 277, 277, 277, + 316, 277, 277, 286, 287, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 288, 277, 319, 277, 277, 277, 56, + 320, 277, 282, 283, 284, 277, 277, 277, + 293, 277, 319, 277, 287, 277, 321, 322, + 323, 324, 43, 282, 283, 284, 277, 277, + 67, 325, 277, 277, 286, 287, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 288, 277, 326, 322, 327, 327, + 43, 282, 283, 284, 277, 277, 277, 325, + 277, 277, 286, 287, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 288, 277, 322, 327, 327, 43, 282, 283, + 284, 277, 277, 277, 325, 277, 277, 286, + 287, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 288, 277, 56, + 328, 277, 282, 283, 284, 277, 277, 277, + 293, 277, 277, 277, 287, 277, 282, 283, + 284, 277, 277, 277, 293, 277, 277, 277, + 287, 277, 329, 277, 277, 330, 283, 284, + 277, 283, 284, 277, 283, 331, 277, 283, + 277, 329, 277, 277, 277, 283, 284, 277, + 332, 277, 333, 334, 277, 282, 283, 284, + 277, 277, 41, 277, 277, 277, 277, 287, + 277, 40, 277, 277, 277, 277, 282, 283, + 284, 277, 277, 277, 277, 277, 277, 277, + 287, 277, 282, 283, 284, 277, 277, 277, + 277, 277, 277, 277, 287, 277, 335, 277, + 277, 277, 277, 282, 283, 284, 277, 282, + 283, 284, 277, 332, 277, 277, 277, 277, + 282, 283, 284, 277, 277, 277, 277, 277, + 277, 277, 287, 277, 332, 277, 333, 277, + 277, 282, 283, 284, 277, 277, 41, 277, + 277, 277, 277, 287, 277, 56, 277, 336, + 336, 43, 282, 283, 284, 277, 277, 277, + 293, 277, 277, 277, 287, 277, 337, 65, + 338, 339, 46, 282, 283, 284, 277, 277, + 277, 293, 277, 277, 277, 287, 277, 65, + 338, 339, 46, 282, 283, 284, 277, 277, + 277, 293, 277, 277, 277, 287, 277, 338, + 338, 46, 282, 283, 284, 277, 277, 277, + 293, 277, 277, 277, 287, 277, 340, 62, + 341, 342, 49, 282, 283, 284, 277, 277, + 277, 293, 277, 277, 277, 287, 277, 62, + 341, 342, 49, 282, 283, 284, 277, 277, + 277, 293, 277, 277, 277, 287, 277, 341, + 341, 49, 282, 283, 284, 277, 277, 277, + 293, 277, 277, 277, 287, 277, 343, 59, + 344, 345, 52, 282, 283, 284, 277, 277, + 277, 293, 277, 277, 277, 287, 277, 59, + 344, 345, 52, 282, 283, 284, 277, 277, + 277, 293, 277, 277, 277, 287, 277, 344, + 344, 52, 282, 283, 284, 277, 277, 277, + 293, 277, 277, 277, 287, 277, 346, 56, + 277, 347, 277, 282, 283, 284, 277, 277, + 277, 293, 277, 277, 277, 287, 277, 56, + 277, 347, 277, 282, 283, 284, 277, 277, + 277, 293, 277, 277, 277, 287, 277, 348, + 277, 282, 283, 284, 277, 277, 277, 293, + 277, 277, 277, 287, 277, 56, 277, 277, + 277, 277, 282, 283, 284, 277, 277, 277, + 293, 277, 277, 277, 287, 277, 39, 40, + 277, 277, 56, 328, 277, 282, 283, 284, + 277, 277, 277, 293, 277, 39, 277, 287, + 277, 322, 327, 327, 43, 282, 283, 284, + 277, 277, 277, 325, 277, 277, 277, 287, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 288, 277, 322, 327, + 327, 43, 282, 283, 284, 277, 277, 277, + 325, 277, 277, 277, 287, 277, 321, 322, + 327, 327, 43, 282, 283, 284, 277, 277, + 277, 325, 277, 277, 286, 287, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 288, 277, 321, 322, 323, 327, + 43, 282, 283, 284, 277, 277, 67, 325, + 277, 277, 286, 287, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 288, 277, 319, 277, 349, 277, 336, 336, + 43, 282, 283, 284, 277, 277, 277, 293, + 277, 319, 277, 287, 277, 319, 277, 277, + 277, 277, 277, 277, 282, 283, 284, 277, + 277, 277, 293, 277, 319, 277, 287, 277, + 319, 277, 277, 277, 277, 350, 277, 282, + 283, 284, 277, 277, 277, 293, 277, 319, + 277, 287, 277, 319, 277, 349, 277, 277, + 277, 277, 282, 283, 284, 277, 277, 277, + 293, 277, 319, 277, 287, 277, 319, 40, + 277, 277, 56, 320, 277, 282, 283, 284, + 277, 277, 277, 293, 277, 319, 277, 287, + 277, 312, 313, 318, 318, 43, 282, 283, + 284, 277, 277, 277, 316, 277, 277, 286, + 287, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 288, 277, 312, + 313, 314, 318, 43, 282, 283, 284, 277, + 277, 69, 316, 277, 277, 286, 287, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 288, 277, 310, 277, 351, + 277, 336, 336, 43, 282, 283, 284, 277, + 277, 277, 293, 277, 310, 277, 287, 277, + 310, 277, 277, 277, 277, 277, 277, 282, + 283, 284, 277, 277, 277, 293, 277, 310, + 277, 287, 277, 310, 277, 277, 277, 277, + 352, 277, 282, 283, 284, 277, 277, 277, + 293, 277, 310, 277, 287, 277, 310, 277, + 351, 277, 277, 277, 277, 282, 283, 284, + 277, 277, 277, 293, 277, 310, 277, 287, + 277, 310, 40, 277, 277, 56, 311, 277, + 282, 283, 284, 277, 277, 277, 293, 277, + 310, 277, 287, 277, 303, 304, 309, 309, + 43, 282, 283, 284, 277, 277, 277, 307, + 277, 277, 286, 287, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 288, 277, 303, 304, 305, 309, 43, 282, + 283, 284, 277, 277, 71, 307, 277, 277, + 286, 287, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 288, 277, + 301, 277, 353, 277, 336, 336, 43, 282, + 283, 284, 277, 277, 277, 293, 277, 301, + 277, 287, 277, 301, 277, 277, 277, 277, + 277, 277, 282, 283, 284, 277, 277, 277, + 293, 277, 301, 277, 287, 277, 301, 277, + 277, 277, 277, 354, 277, 282, 283, 284, + 277, 277, 277, 293, 277, 301, 277, 287, + 277, 301, 277, 353, 277, 277, 277, 277, + 282, 283, 284, 277, 277, 277, 293, 277, + 301, 277, 287, 277, 301, 40, 277, 277, + 56, 302, 277, 282, 283, 284, 277, 277, + 277, 293, 277, 301, 277, 287, 277, 294, + 295, 300, 300, 43, 282, 283, 284, 277, + 277, 277, 298, 277, 277, 286, 287, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 288, 277, 294, 295, 296, + 300, 43, 282, 283, 284, 277, 277, 73, + 298, 277, 277, 286, 287, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 288, 277, 291, 277, 355, 277, 336, + 336, 43, 282, 283, 284, 277, 277, 277, + 293, 277, 291, 277, 287, 277, 291, 277, + 277, 277, 277, 277, 277, 282, 283, 284, + 277, 277, 277, 293, 277, 291, 277, 287, + 277, 291, 277, 277, 277, 277, 356, 277, + 282, 283, 284, 277, 277, 277, 293, 277, + 291, 277, 287, 277, 291, 277, 355, 277, + 277, 277, 277, 282, 283, 284, 277, 277, + 277, 293, 277, 291, 277, 287, 277, 74, + 42, 42, 43, 277, 277, 277, 277, 277, + 277, 74, 277, 291, 40, 277, 277, 56, + 292, 277, 282, 283, 284, 277, 277, 277, + 293, 277, 291, 277, 287, 277, 278, 279, + 290, 281, 43, 282, 283, 284, 277, 277, + 277, 285, 277, 277, 286, 287, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 288, 277, 358, 184, 359, 359, + 81, 187, 188, 189, 357, 357, 357, 191, + 357, 357, 194, 360, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 196, 357, 184, 359, 359, 81, 187, 188, + 189, 357, 357, 357, 191, 357, 357, 194, + 360, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 196, 357, 361, + 357, 357, 357, 95, 362, 357, 187, 188, + 189, 357, 357, 357, 363, 357, 361, 357, + 360, 357, 364, 365, 366, 367, 81, 187, + 188, 189, 357, 357, 112, 368, 357, 357, + 194, 360, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 196, 357, + 369, 365, 370, 370, 81, 187, 188, 189, + 357, 357, 357, 368, 357, 357, 194, 360, + 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 196, 357, 365, 370, + 370, 81, 187, 188, 189, 357, 357, 357, + 368, 357, 357, 194, 360, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 357, 196, 357, 371, 357, 357, 357, 95, + 372, 357, 187, 188, 189, 357, 357, 357, + 363, 357, 371, 357, 360, 357, 373, 374, + 375, 376, 81, 187, 188, 189, 357, 357, + 110, 377, 357, 357, 194, 360, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 196, 357, 378, 374, 379, 379, + 81, 187, 188, 189, 357, 357, 357, 377, + 357, 357, 194, 360, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 196, 357, 374, 379, 379, 81, 187, 188, + 189, 357, 357, 357, 377, 357, 357, 194, + 360, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 196, 357, 380, + 357, 357, 357, 95, 381, 357, 187, 188, + 189, 357, 357, 357, 363, 357, 380, 357, + 360, 357, 382, 383, 384, 385, 81, 187, + 188, 189, 357, 357, 108, 386, 357, 357, + 194, 360, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 196, 357, + 387, 383, 388, 388, 81, 187, 188, 189, + 357, 357, 357, 386, 357, 357, 194, 360, + 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 196, 357, 383, 388, + 388, 81, 187, 188, 189, 357, 357, 357, + 386, 357, 357, 194, 360, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 357, 196, 357, 389, 357, 357, 357, 95, + 390, 357, 187, 188, 189, 357, 357, 357, + 363, 357, 389, 357, 360, 357, 391, 392, + 393, 394, 81, 187, 188, 189, 357, 357, + 106, 395, 357, 357, 194, 360, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 196, 357, 396, 392, 397, 397, + 81, 187, 188, 189, 357, 357, 357, 395, + 357, 357, 194, 360, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 196, 357, 392, 397, 397, 81, 187, 188, + 189, 357, 357, 357, 395, 357, 357, 194, + 360, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 196, 357, 95, + 398, 357, 187, 188, 189, 357, 357, 357, + 363, 357, 357, 357, 360, 357, 187, 188, + 189, 357, 357, 357, 363, 357, 357, 357, + 360, 357, 399, 357, 357, 400, 188, 189, + 357, 188, 189, 357, 188, 401, 357, 188, + 357, 399, 357, 357, 357, 188, 189, 357, + 402, 357, 403, 404, 357, 187, 188, 189, + 357, 357, 79, 357, 357, 357, 357, 360, + 357, 78, 357, 357, 357, 357, 187, 188, + 189, 357, 357, 357, 357, 357, 357, 357, + 360, 357, 187, 188, 189, 357, 357, 357, + 357, 357, 357, 357, 360, 357, 405, 357, + 357, 357, 357, 187, 188, 189, 357, 187, + 188, 189, 357, 402, 357, 357, 357, 357, + 187, 188, 189, 357, 357, 357, 357, 357, + 357, 357, 360, 357, 402, 357, 403, 357, + 357, 187, 188, 189, 357, 357, 79, 357, + 357, 357, 357, 360, 357, 95, 357, 406, + 406, 81, 187, 188, 189, 357, 357, 357, + 363, 357, 357, 357, 360, 357, 407, 104, + 408, 409, 85, 187, 188, 189, 357, 357, + 357, 363, 357, 357, 357, 360, 357, 104, + 408, 409, 85, 187, 188, 189, 357, 357, + 357, 363, 357, 357, 357, 360, 357, 408, + 408, 85, 187, 188, 189, 357, 357, 357, + 363, 357, 357, 357, 360, 357, 410, 101, + 411, 412, 88, 187, 188, 189, 357, 357, + 357, 363, 357, 357, 357, 360, 357, 101, + 411, 412, 88, 187, 188, 189, 357, 357, + 357, 363, 357, 357, 357, 360, 357, 411, + 411, 88, 187, 188, 189, 357, 357, 357, + 363, 357, 357, 357, 360, 357, 413, 98, + 414, 415, 91, 187, 188, 189, 357, 357, + 357, 363, 357, 357, 357, 360, 357, 98, + 414, 415, 91, 187, 188, 189, 357, 357, + 357, 363, 357, 357, 357, 360, 357, 414, + 414, 91, 187, 188, 189, 357, 357, 357, + 363, 357, 357, 357, 360, 357, 416, 95, + 357, 417, 357, 187, 188, 189, 357, 357, + 357, 363, 357, 357, 357, 360, 357, 95, + 357, 417, 357, 187, 188, 189, 357, 357, + 357, 363, 357, 357, 357, 360, 357, 418, + 357, 187, 188, 189, 357, 357, 357, 363, + 357, 357, 357, 360, 357, 95, 357, 357, + 357, 357, 187, 188, 189, 357, 357, 357, + 363, 357, 357, 357, 360, 357, 77, 78, + 357, 357, 95, 398, 357, 187, 188, 189, + 357, 357, 357, 363, 357, 77, 357, 360, + 357, 392, 397, 397, 81, 187, 188, 189, + 357, 357, 357, 395, 357, 357, 357, 360, + 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 196, 357, 392, 397, + 397, 81, 187, 188, 189, 357, 357, 357, + 395, 357, 357, 357, 360, 357, 391, 392, + 397, 397, 81, 187, 188, 189, 357, 357, + 357, 395, 357, 357, 194, 360, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 196, 357, 391, 392, 393, 397, + 81, 187, 188, 189, 357, 357, 106, 395, + 357, 357, 194, 360, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 196, 357, 389, 357, 419, 357, 406, 406, + 81, 187, 188, 189, 357, 357, 357, 363, + 357, 389, 357, 360, 357, 389, 357, 357, + 357, 357, 357, 357, 187, 188, 189, 357, + 357, 357, 363, 357, 389, 357, 360, 357, + 389, 357, 357, 357, 357, 420, 357, 187, + 188, 189, 357, 357, 357, 363, 357, 389, + 357, 360, 357, 389, 357, 419, 357, 357, + 357, 357, 187, 188, 189, 357, 357, 357, + 363, 357, 389, 357, 360, 357, 389, 78, + 357, 357, 95, 390, 357, 187, 188, 189, + 357, 357, 357, 363, 357, 389, 357, 360, + 357, 382, 383, 388, 388, 81, 187, 188, + 189, 357, 357, 357, 386, 357, 357, 194, + 360, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 196, 357, 382, + 383, 384, 388, 81, 187, 188, 189, 357, + 357, 108, 386, 357, 357, 194, 360, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 196, 357, 380, 357, 421, + 357, 406, 406, 81, 187, 188, 189, 357, + 357, 357, 363, 357, 380, 357, 360, 357, + 380, 357, 357, 357, 357, 357, 357, 187, + 188, 189, 357, 357, 357, 363, 357, 380, + 357, 360, 357, 380, 357, 357, 357, 357, + 422, 357, 187, 188, 189, 357, 357, 357, + 363, 357, 380, 357, 360, 357, 380, 357, + 421, 357, 357, 357, 357, 187, 188, 189, + 357, 357, 357, 363, 357, 380, 357, 360, + 357, 380, 78, 357, 357, 95, 381, 357, + 187, 188, 189, 357, 357, 357, 363, 357, + 380, 357, 360, 357, 373, 374, 379, 379, + 81, 187, 188, 189, 357, 357, 357, 377, + 357, 357, 194, 360, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 196, 357, 373, 374, 375, 379, 81, 187, + 188, 189, 357, 357, 110, 377, 357, 357, + 194, 360, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 196, 357, + 371, 357, 423, 357, 406, 406, 81, 187, + 188, 189, 357, 357, 357, 363, 357, 371, + 357, 360, 357, 371, 357, 357, 357, 357, + 357, 357, 187, 188, 189, 357, 357, 357, + 363, 357, 371, 357, 360, 357, 371, 357, + 357, 357, 357, 424, 357, 187, 188, 189, + 357, 357, 357, 363, 357, 371, 357, 360, + 357, 371, 357, 423, 357, 357, 357, 357, + 187, 188, 189, 357, 357, 357, 363, 357, + 371, 357, 360, 357, 371, 78, 357, 357, + 95, 372, 357, 187, 188, 189, 357, 357, + 357, 363, 357, 371, 357, 360, 357, 364, + 365, 370, 370, 81, 187, 188, 189, 357, + 357, 357, 368, 357, 357, 194, 360, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 196, 357, 364, 365, 366, + 370, 81, 187, 188, 189, 357, 357, 112, + 368, 357, 357, 194, 360, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 357, 196, 357, 361, 357, 425, 357, 406, + 406, 81, 187, 188, 189, 357, 357, 357, + 363, 357, 361, 357, 360, 357, 361, 357, + 357, 357, 357, 357, 357, 187, 188, 189, + 357, 357, 357, 363, 357, 361, 357, 360, + 357, 361, 357, 357, 357, 357, 426, 357, + 187, 188, 189, 357, 357, 357, 363, 357, + 361, 357, 360, 357, 361, 357, 425, 357, + 357, 357, 357, 187, 188, 189, 357, 357, + 357, 363, 357, 361, 357, 360, 357, 361, + 78, 357, 357, 95, 362, 357, 187, 188, + 189, 357, 357, 357, 363, 357, 361, 357, + 360, 357, 113, 80, 80, 81, 427, 427, + 427, 427, 427, 152, 113, 427, 183, 184, + 359, 359, 81, 187, 188, 189, 357, 357, + 357, 191, 357, 357, 194, 360, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 196, 357, 113, 80, 80, 81, + 427, 427, 427, 427, 427, 427, 113, 427, + 429, 430, 431, 432, 119, 433, 434, 435, + 428, 428, 151, 436, 428, 428, 437, 438, + 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 439, 428, 440, 430, + 432, 432, 119, 433, 434, 435, 428, 428, + 428, 436, 428, 428, 437, 438, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 439, 428, 430, 432, 432, 119, + 433, 434, 435, 428, 428, 428, 436, 428, + 428, 437, 438, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 439, + 428, 441, 428, 428, 428, 132, 442, 428, + 433, 434, 435, 428, 428, 428, 443, 428, + 441, 428, 438, 428, 444, 445, 446, 447, + 119, 433, 434, 435, 428, 428, 149, 448, + 428, 428, 437, 438, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, + 439, 428, 449, 445, 450, 450, 119, 433, + 434, 435, 428, 428, 428, 448, 428, 428, + 437, 438, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 439, 428, + 445, 450, 450, 119, 433, 434, 435, 428, + 428, 428, 448, 428, 428, 437, 438, 428, + 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 439, 428, 451, 428, 428, + 428, 132, 452, 428, 433, 434, 435, 428, + 428, 428, 443, 428, 451, 428, 438, 428, + 453, 454, 455, 456, 119, 433, 434, 435, + 428, 428, 147, 457, 428, 428, 437, 438, + 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 439, 428, 458, 454, + 459, 459, 119, 433, 434, 435, 428, 428, + 428, 457, 428, 428, 437, 438, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 439, 428, 454, 459, 459, 119, + 433, 434, 435, 428, 428, 428, 457, 428, + 428, 437, 438, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 439, + 428, 460, 428, 428, 428, 132, 461, 428, + 433, 434, 435, 428, 428, 428, 443, 428, + 460, 428, 438, 428, 462, 463, 464, 465, + 119, 433, 434, 435, 428, 428, 145, 466, + 428, 428, 437, 438, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, + 439, 428, 467, 463, 468, 468, 119, 433, + 434, 435, 428, 428, 428, 466, 428, 428, + 437, 438, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 439, 428, + 463, 468, 468, 119, 433, 434, 435, 428, + 428, 428, 466, 428, 428, 437, 438, 428, + 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 439, 428, 469, 428, 428, + 428, 132, 470, 428, 433, 434, 435, 428, + 428, 428, 443, 428, 469, 428, 438, 428, + 471, 472, 473, 474, 119, 433, 434, 435, + 428, 428, 143, 475, 428, 428, 437, 438, + 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 439, 428, 476, 472, + 477, 477, 119, 433, 434, 435, 428, 428, + 428, 475, 428, 428, 437, 438, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 439, 428, 472, 477, 477, 119, + 433, 434, 435, 428, 428, 428, 475, 428, + 428, 437, 438, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 439, + 428, 132, 478, 428, 433, 434, 435, 428, + 428, 428, 443, 428, 428, 428, 438, 428, + 433, 434, 435, 428, 428, 428, 443, 428, + 428, 428, 438, 428, 479, 428, 428, 480, + 434, 435, 428, 434, 435, 428, 434, 481, + 428, 434, 428, 479, 428, 428, 428, 434, + 435, 428, 482, 428, 483, 484, 428, 433, + 434, 435, 428, 428, 117, 428, 428, 428, + 428, 438, 428, 116, 428, 428, 428, 428, + 433, 434, 435, 428, 428, 428, 428, 428, + 428, 428, 438, 428, 433, 434, 435, 428, + 428, 428, 428, 428, 428, 428, 438, 428, + 485, 428, 428, 428, 428, 433, 434, 435, + 428, 433, 434, 435, 428, 482, 428, 428, + 428, 428, 433, 434, 435, 428, 428, 428, + 428, 428, 428, 428, 438, 428, 482, 428, + 483, 428, 428, 433, 434, 435, 428, 428, + 117, 428, 428, 428, 428, 438, 428, 132, + 428, 486, 486, 119, 433, 434, 435, 428, + 428, 428, 443, 428, 428, 428, 438, 428, + 487, 141, 488, 489, 122, 433, 434, 435, + 428, 428, 428, 443, 428, 428, 428, 438, + 428, 141, 488, 489, 122, 433, 434, 435, + 428, 428, 428, 443, 428, 428, 428, 438, + 428, 488, 488, 122, 433, 434, 435, 428, + 428, 428, 443, 428, 428, 428, 438, 428, + 490, 138, 491, 492, 125, 433, 434, 435, + 428, 428, 428, 443, 428, 428, 428, 438, + 428, 138, 491, 492, 125, 433, 434, 435, + 428, 428, 428, 443, 428, 428, 428, 438, + 428, 491, 491, 125, 433, 434, 435, 428, + 428, 428, 443, 428, 428, 428, 438, 428, + 493, 135, 494, 495, 128, 433, 434, 435, + 428, 428, 428, 443, 428, 428, 428, 438, + 428, 135, 494, 495, 128, 433, 434, 435, + 428, 428, 428, 443, 428, 428, 428, 438, + 428, 494, 494, 128, 433, 434, 435, 428, + 428, 428, 443, 428, 428, 428, 438, 428, + 496, 132, 428, 497, 428, 433, 434, 435, + 428, 428, 428, 443, 428, 428, 428, 438, + 428, 132, 428, 497, 428, 433, 434, 435, + 428, 428, 428, 443, 428, 428, 428, 438, + 428, 498, 428, 433, 434, 435, 428, 428, + 428, 443, 428, 428, 428, 438, 428, 132, + 428, 428, 428, 428, 433, 434, 435, 428, + 428, 428, 443, 428, 428, 428, 438, 428, + 115, 116, 428, 428, 132, 478, 428, 433, + 434, 435, 428, 428, 428, 443, 428, 115, + 428, 438, 428, 472, 477, 477, 119, 433, + 434, 435, 428, 428, 428, 475, 428, 428, + 428, 438, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 439, 428, + 472, 477, 477, 119, 433, 434, 435, 428, + 428, 428, 475, 428, 428, 428, 438, 428, + 471, 472, 477, 477, 119, 433, 434, 435, + 428, 428, 428, 475, 428, 428, 437, 438, + 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 439, 428, 471, 472, + 473, 477, 119, 433, 434, 435, 428, 428, + 143, 475, 428, 428, 437, 438, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 439, 428, 469, 428, 499, 428, + 486, 486, 119, 433, 434, 435, 428, 428, + 428, 443, 428, 469, 428, 438, 428, 469, + 428, 428, 428, 428, 428, 428, 433, 434, + 435, 428, 428, 428, 443, 428, 469, 428, + 438, 428, 469, 428, 428, 428, 428, 500, + 428, 433, 434, 435, 428, 428, 428, 443, + 428, 469, 428, 438, 428, 469, 428, 499, + 428, 428, 428, 428, 433, 434, 435, 428, + 428, 428, 443, 428, 469, 428, 438, 428, + 469, 116, 428, 428, 132, 470, 428, 433, + 434, 435, 428, 428, 428, 443, 428, 469, + 428, 438, 428, 462, 463, 468, 468, 119, + 433, 434, 435, 428, 428, 428, 466, 428, + 428, 437, 438, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 439, + 428, 462, 463, 464, 468, 119, 433, 434, + 435, 428, 428, 145, 466, 428, 428, 437, + 438, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 439, 428, 460, + 428, 501, 428, 486, 486, 119, 433, 434, + 435, 428, 428, 428, 443, 428, 460, 428, + 438, 428, 460, 428, 428, 428, 428, 428, + 428, 433, 434, 435, 428, 428, 428, 443, + 428, 460, 428, 438, 428, 460, 428, 428, + 428, 428, 502, 428, 433, 434, 435, 428, + 428, 428, 443, 428, 460, 428, 438, 428, + 460, 428, 501, 428, 428, 428, 428, 433, + 434, 435, 428, 428, 428, 443, 428, 460, + 428, 438, 428, 460, 116, 428, 428, 132, + 461, 428, 433, 434, 435, 428, 428, 428, + 443, 428, 460, 428, 438, 428, 453, 454, + 459, 459, 119, 433, 434, 435, 428, 428, + 428, 457, 428, 428, 437, 438, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 439, 428, 453, 454, 455, 459, + 119, 433, 434, 435, 428, 428, 147, 457, + 428, 428, 437, 438, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, + 439, 428, 451, 428, 503, 428, 486, 486, + 119, 433, 434, 435, 428, 428, 428, 443, + 428, 451, 428, 438, 428, 451, 428, 428, + 428, 428, 428, 428, 433, 434, 435, 428, + 428, 428, 443, 428, 451, 428, 438, 428, + 451, 428, 428, 428, 428, 504, 428, 433, + 434, 435, 428, 428, 428, 443, 428, 451, + 428, 438, 428, 451, 428, 503, 428, 428, + 428, 428, 433, 434, 435, 428, 428, 428, + 443, 428, 451, 428, 438, 428, 451, 116, + 428, 428, 132, 452, 428, 433, 434, 435, + 428, 428, 428, 443, 428, 451, 428, 438, + 428, 444, 445, 450, 450, 119, 433, 434, + 435, 428, 428, 428, 448, 428, 428, 437, + 438, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 439, 428, 444, + 445, 446, 450, 119, 433, 434, 435, 428, + 428, 149, 448, 428, 428, 437, 438, 428, + 428, 428, 428, 428, 428, 428, 428, 428, + 428, 428, 428, 439, 428, 441, 428, 505, + 428, 486, 486, 119, 433, 434, 435, 428, + 428, 428, 443, 428, 441, 428, 438, 428, + 441, 428, 428, 428, 428, 428, 428, 433, + 434, 435, 428, 428, 428, 443, 428, 441, + 428, 438, 428, 441, 428, 428, 428, 428, + 506, 428, 433, 434, 435, 428, 428, 428, + 443, 428, 441, 428, 438, 428, 441, 428, + 505, 428, 428, 428, 428, 433, 434, 435, + 428, 428, 428, 443, 428, 441, 428, 438, + 428, 441, 116, 428, 428, 132, 442, 428, + 433, 434, 435, 428, 428, 428, 443, 428, + 441, 428, 438, 428, 429, 430, 432, 432, + 119, 433, 434, 435, 428, 428, 428, 436, + 428, 428, 437, 438, 428, 428, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, + 439, 428, 181, 182, 183, 184, 507, 359, + 81, 187, 188, 189, 190, 190, 152, 191, + 357, 181, 194, 360, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, + 196, 357, 198, 508, 200, 201, 5, 202, + 203, 204, 197, 197, 37, 205, 197, 197, + 206, 207, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 208, 197, + 211, 182, 183, 184, 509, 510, 81, 511, + 203, 512, 190, 190, 152, 513, 197, 211, + 194, 514, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 196, 197, + 113, 80, 80, 81, 202, 203, 204, 197, + 197, 152, 515, 197, 197, 197, 207, 197, + 516, 2, 357, 357, 357, 426, 357, 187, + 188, 189, 357, 357, 357, 363, 357, 516, + 357, 360, 357, 517, 365, 518, 519, 81, + 511, 203, 512, 197, 197, 153, 368, 197, + 197, 194, 514, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 196, + 197, 520, 365, 370, 370, 81, 511, 203, + 512, 197, 197, 197, 368, 197, 197, 194, + 514, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 196, 197, 365, + 370, 370, 81, 511, 203, 512, 197, 197, + 197, 368, 197, 197, 194, 514, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 196, 197, 521, 197, 197, 522, + 203, 512, 197, 203, 512, 197, 203, 523, + 197, 203, 197, 521, 197, 197, 197, 203, + 512, 197, 524, 197, 197, 197, 197, 511, + 203, 512, 197, 511, 203, 512, 197, 517, + 365, 370, 370, 81, 511, 203, 512, 197, + 197, 197, 368, 197, 197, 194, 514, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 196, 197, 517, 365, 518, + 370, 81, 511, 203, 512, 197, 197, 153, + 368, 197, 197, 194, 514, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, + 197, 196, 197, 211, 197, 275, 113, 525, + 525, 155, 202, 203, 204, 197, 197, 197, + 515, 197, 211, 197, 207, 197, 526, 179, + 527, 528, 157, 511, 203, 512, 197, 197, + 197, 529, 197, 197, 197, 514, 197, 179, + 527, 528, 157, 511, 203, 512, 197, 197, + 197, 529, 197, 197, 197, 514, 197, 527, + 527, 157, 511, 203, 512, 197, 197, 197, + 529, 197, 197, 197, 514, 197, 530, 176, + 531, 532, 160, 511, 203, 512, 197, 197, + 197, 529, 197, 197, 197, 514, 197, 176, + 531, 532, 160, 511, 203, 512, 197, 197, + 197, 529, 197, 197, 197, 514, 197, 531, + 531, 160, 511, 203, 512, 197, 197, 197, + 529, 197, 197, 197, 514, 197, 533, 173, + 534, 535, 163, 511, 203, 512, 197, 197, + 197, 529, 197, 197, 197, 514, 197, 173, + 534, 535, 163, 511, 203, 512, 197, 197, + 197, 529, 197, 197, 197, 514, 197, 534, + 534, 163, 511, 203, 512, 197, 197, 197, + 529, 197, 197, 197, 514, 197, 536, 170, + 197, 537, 197, 511, 203, 512, 197, 197, + 197, 529, 197, 197, 197, 514, 197, 170, + 197, 537, 197, 511, 203, 512, 197, 197, + 197, 529, 197, 197, 197, 514, 197, 511, + 203, 512, 197, 197, 197, 529, 197, 197, + 197, 514, 197, 538, 197, 539, 540, 197, + 511, 203, 512, 197, 197, 167, 197, 197, + 197, 197, 514, 197, 166, 197, 197, 197, + 197, 511, 203, 512, 197, 197, 197, 197, + 197, 197, 197, 514, 197, 511, 203, 512, + 197, 197, 197, 197, 197, 197, 197, 514, + 197, 538, 197, 197, 197, 197, 511, 203, + 512, 197, 197, 197, 197, 197, 197, 197, + 514, 197, 538, 197, 539, 197, 197, 511, + 203, 512, 197, 197, 167, 197, 197, 197, + 197, 514, 197, 516, 166, 357, 357, 95, + 362, 357, 187, 188, 189, 357, 357, 357, + 363, 357, 516, 357, 360, 357, 542, 541, + 541, 541, 541, 543, 544, 545, 541, 543, + 544, 545, 541, 546, 541, 541, 547, 544, + 545, 541, 544, 545, 541, 544, 548, 541, + 544, 541, 546, 541, 541, 541, 544, 545, + 541, 0 +}; + +static const short _indic_syllable_machine_trans_targs[] = { + 170, 197, 199, 202, 3, 205, 4, 6, + 208, 7, 9, 211, 10, 12, 214, 13, + 15, 16, 191, 18, 19, 213, 21, 22, + 210, 24, 25, 207, 216, 221, 225, 228, + 232, 235, 239, 242, 246, 249, 170, 277, + 279, 282, 39, 285, 40, 42, 288, 43, + 45, 291, 46, 48, 294, 49, 51, 52, + 271, 54, 55, 293, 57, 58, 290, 60, + 61, 287, 296, 301, 305, 308, 312, 315, + 319, 322, 326, 330, 170, 356, 358, 361, + 75, 364, 170, 76, 78, 367, 79, 81, + 370, 82, 84, 373, 85, 87, 88, 350, + 90, 91, 372, 93, 94, 369, 96, 97, + 366, 375, 380, 384, 387, 391, 394, 398, + 401, 405, 170, 437, 439, 442, 110, 445, + 111, 113, 448, 114, 116, 451, 117, 119, + 454, 120, 122, 123, 431, 125, 126, 453, + 128, 129, 450, 131, 132, 447, 456, 461, + 465, 468, 472, 475, 479, 482, 486, 489, + 409, 505, 146, 508, 148, 511, 149, 151, + 514, 152, 154, 517, 155, 520, 522, 523, + 159, 160, 519, 162, 163, 516, 165, 166, + 513, 168, 169, 510, 170, 171, 251, 331, + 333, 408, 410, 351, 170, 353, 411, 407, + 490, 491, 378, 526, 379, 170, 172, 174, + 35, 250, 192, 170, 194, 248, 219, 200, + 220, 173, 34, 175, 244, 0, 176, 178, + 33, 243, 241, 177, 32, 179, 237, 180, + 182, 31, 236, 234, 181, 30, 183, 230, + 184, 186, 29, 229, 227, 185, 28, 187, + 223, 188, 190, 27, 222, 218, 189, 26, + 204, 193, 196, 195, 198, 1, 203, 201, + 2, 206, 5, 23, 209, 8, 20, 212, + 11, 17, 215, 14, 217, 224, 226, 231, + 233, 238, 240, 245, 247, 170, 252, 254, + 71, 328, 272, 170, 274, 329, 299, 280, + 300, 253, 70, 255, 324, 36, 256, 258, + 69, 323, 321, 257, 68, 259, 317, 260, + 262, 67, 316, 314, 261, 66, 263, 310, + 264, 266, 65, 309, 307, 265, 64, 267, + 303, 268, 270, 63, 302, 298, 269, 62, + 284, 273, 276, 275, 278, 37, 283, 281, + 38, 286, 41, 59, 289, 44, 56, 292, + 47, 53, 295, 50, 297, 304, 306, 311, + 313, 318, 320, 325, 327, 170, 332, 106, + 359, 334, 403, 72, 335, 337, 105, 402, + 400, 336, 104, 338, 396, 339, 341, 103, + 395, 393, 340, 102, 342, 389, 343, 345, + 101, 388, 386, 344, 100, 346, 382, 347, + 349, 99, 381, 377, 348, 98, 363, 352, + 355, 354, 357, 73, 362, 360, 74, 365, + 77, 95, 368, 80, 92, 371, 83, 89, + 374, 86, 376, 383, 385, 390, 392, 397, + 399, 404, 406, 170, 170, 412, 414, 142, + 141, 432, 170, 434, 488, 459, 440, 460, + 413, 415, 484, 107, 416, 418, 140, 483, + 481, 417, 139, 419, 477, 420, 422, 138, + 476, 474, 421, 137, 423, 470, 424, 426, + 136, 469, 467, 425, 135, 427, 463, 428, + 430, 134, 462, 458, 429, 133, 444, 433, + 436, 435, 438, 108, 443, 441, 109, 446, + 112, 130, 449, 115, 127, 452, 118, 124, + 455, 121, 457, 464, 466, 471, 473, 478, + 480, 485, 487, 143, 492, 493, 507, 498, + 500, 525, 503, 494, 495, 496, 144, 506, + 497, 499, 502, 501, 504, 145, 509, 147, + 167, 156, 512, 150, 164, 515, 153, 161, + 518, 158, 521, 157, 524, 170, 527, 528, + 170, 530, 529, 532, 531 +}; + +static const char _indic_syllable_machine_trans_actions[] = { + 1, 2, 0, 0, 0, 2, 0, 0, + 2, 0, 0, 2, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 2, 0, 0, + 2, 0, 0, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 2, + 0, 0, 0, 2, 0, 0, 2, 0, + 0, 2, 0, 0, 2, 0, 0, 0, + 2, 0, 0, 2, 0, 0, 2, 0, + 0, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 4, 2, 0, 0, + 0, 2, 5, 0, 0, 2, 0, 0, + 2, 0, 0, 2, 0, 0, 0, 2, + 0, 0, 2, 0, 0, 2, 0, 0, + 2, 2, 6, 2, 6, 2, 6, 2, + 6, 2, 7, 2, 0, 0, 0, 2, + 0, 0, 2, 0, 0, 2, 0, 0, + 2, 0, 0, 0, 2, 0, 0, 2, + 0, 0, 2, 0, 0, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 6, 8, 0, 2, 0, 2, 0, 0, + 2, 0, 0, 2, 0, 2, 0, 0, + 0, 0, 2, 0, 0, 2, 0, 0, + 2, 0, 0, 2, 11, 2, 2, 6, + 2, 12, 12, 0, 13, 0, 2, 2, + 6, 2, 6, 0, 6, 14, 2, 2, + 0, 2, 0, 15, 0, 2, 2, 0, + 2, 2, 0, 2, 2, 0, 2, 2, + 0, 2, 2, 2, 0, 2, 2, 2, + 2, 0, 2, 2, 2, 0, 2, 2, + 2, 2, 0, 2, 2, 2, 0, 2, + 2, 2, 2, 0, 2, 2, 2, 0, + 2, 0, 0, 0, 0, 0, 2, 0, + 0, 2, 0, 0, 2, 0, 0, 2, + 0, 0, 2, 0, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 16, 2, 2, + 0, 2, 0, 17, 0, 2, 2, 0, + 2, 2, 0, 2, 2, 0, 2, 2, + 0, 2, 2, 2, 0, 2, 2, 2, + 2, 0, 2, 2, 2, 0, 2, 2, + 2, 2, 0, 2, 2, 2, 0, 2, + 2, 2, 2, 0, 2, 2, 2, 0, + 2, 0, 0, 0, 0, 0, 2, 0, + 0, 2, 0, 0, 2, 0, 0, 2, + 0, 0, 2, 0, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 18, 6, 0, + 0, 6, 6, 0, 6, 2, 0, 6, + 2, 6, 0, 6, 6, 6, 2, 0, + 6, 2, 6, 0, 6, 6, 6, 2, + 0, 6, 2, 6, 0, 6, 6, 6, + 2, 0, 6, 2, 6, 0, 6, 0, + 0, 0, 0, 0, 2, 0, 0, 2, + 0, 0, 2, 0, 0, 2, 0, 0, + 2, 0, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 19, 20, 2, 2, 0, + 0, 0, 21, 0, 2, 2, 0, 2, + 2, 2, 2, 0, 2, 2, 0, 2, + 2, 2, 0, 2, 2, 2, 2, 0, + 2, 2, 2, 0, 2, 2, 2, 2, + 0, 2, 2, 2, 0, 2, 2, 2, + 2, 0, 2, 2, 2, 0, 2, 0, + 0, 0, 0, 0, 2, 0, 0, 2, + 0, 0, 2, 0, 0, 2, 0, 0, + 2, 0, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 0, 0, 8, 2, 0, + 0, 2, 0, 2, 8, 8, 0, 8, + 8, 0, 0, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 2, 0, 0, + 2, 0, 0, 0, 2, 22, 0, 0, + 23, 0, 0, 0, 0 +}; + +static const char _indic_syllable_machine_to_state_actions[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 +}; + +static const char _indic_syllable_machine_from_state_actions[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 10, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 +}; + +static const short _indic_syllable_machine_eof_trans[] = { + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 77, 77, 77, 83, 83, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, + 83, 77, 77, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 77, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 358, 358, 358, 358, 358, + 358, 358, 358, 358, 358, 358, 358, 358, + 358, 358, 358, 358, 358, 358, 358, 358, + 358, 358, 358, 358, 358, 358, 358, 358, + 358, 358, 358, 358, 358, 358, 358, 358, + 358, 358, 358, 358, 358, 358, 358, 358, + 358, 358, 358, 358, 358, 358, 358, 358, + 358, 358, 358, 358, 358, 358, 358, 358, + 358, 358, 358, 358, 358, 358, 358, 358, + 358, 358, 358, 358, 358, 358, 358, 358, + 428, 358, 428, 429, 429, 429, 429, 429, + 429, 429, 429, 429, 429, 429, 429, 429, + 429, 429, 429, 429, 429, 429, 429, 429, + 429, 429, 429, 429, 429, 429, 429, 429, + 429, 429, 429, 429, 429, 429, 429, 429, + 429, 429, 429, 429, 429, 429, 429, 429, + 429, 429, 429, 429, 429, 429, 429, 429, + 429, 429, 429, 429, 429, 429, 429, 429, + 429, 429, 429, 429, 429, 429, 429, 429, + 429, 429, 429, 429, 429, 429, 429, 429, + 429, 429, 358, 198, 198, 198, 358, 198, + 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 358, 542, 542, + 542, 542, 542, 542, 542 +}; + +static const int indic_syllable_machine_start = 170; +static const int indic_syllable_machine_first_final = 170; +static const int indic_syllable_machine_error = -1; + +static const int indic_syllable_machine_en_main = 170; + + +#line 36 "../../src/hb-ot-shape-complex-indic-machine.rl" + + + +#line 98 "../../src/hb-ot-shape-complex-indic-machine.rl" + + +#define found_syllable(syllable_type) \ + HB_STMT_START { \ + if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #syllable_type); \ + for (unsigned int i = last; i < p+1; i++) \ + info[i].syllable() = (syllable_serial << 4) | syllable_type; \ + last = p+1; \ + syllable_serial++; \ + if (unlikely (syllable_serial == 16)) syllable_serial = 1; \ + } HB_STMT_END + +static void +find_syllables (hb_buffer_t *buffer) +{ + unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED; + int cs; + hb_glyph_info_t *info = buffer->info; + +#line 1646 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp" + { + cs = indic_syllable_machine_start; + ts = 0; + te = 0; + act = 0; + } + +#line 119 "../../src/hb-ot-shape-complex-indic-machine.rl" + + + p = 0; + pe = eof = buffer->len; + + unsigned int last = 0; + unsigned int syllable_serial = 1; + +#line 1663 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp" + { + int _slen; + int _trans; + const unsigned char *_keys; + const short *_inds; + if ( p == pe ) + goto _test_eof; +_resume: + switch ( _indic_syllable_machine_from_state_actions[cs] ) { + case 10: +#line 1 "NONE" + {ts = p;} + break; +#line 1677 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp" + } + + _keys = _indic_syllable_machine_trans_keys + (cs<<1); + _inds = _indic_syllable_machine_indicies + _indic_syllable_machine_index_offsets[cs]; + + _slen = _indic_syllable_machine_key_spans[cs]; + _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].indic_category()) && + ( info[p].indic_category()) <= _keys[1] ? + ( info[p].indic_category()) - _keys[0] : _slen ]; + +_eof_trans: + cs = _indic_syllable_machine_trans_targs[_trans]; + + if ( _indic_syllable_machine_trans_actions[_trans] == 0 ) + goto _again; + + switch ( _indic_syllable_machine_trans_actions[_trans] ) { + case 2: +#line 1 "NONE" + {te = p+1;} + break; + case 15: +#line 89 "../../src/hb-ot-shape-complex-indic-machine.rl" + {te = p+1;{ found_syllable (consonant_syllable); }} + break; + case 17: +#line 90 "../../src/hb-ot-shape-complex-indic-machine.rl" + {te = p+1;{ found_syllable (vowel_syllable); }} + break; + case 21: +#line 91 "../../src/hb-ot-shape-complex-indic-machine.rl" + {te = p+1;{ found_syllable (standalone_cluster); }} + break; + case 23: +#line 92 "../../src/hb-ot-shape-complex-indic-machine.rl" + {te = p+1;{ found_syllable (avagraha_cluster); }} + break; + case 13: +#line 93 "../../src/hb-ot-shape-complex-indic-machine.rl" + {te = p+1;{ found_syllable (broken_cluster); }} + break; + case 11: +#line 94 "../../src/hb-ot-shape-complex-indic-machine.rl" + {te = p+1;{ found_syllable (non_indic_cluster); }} + break; + case 14: +#line 89 "../../src/hb-ot-shape-complex-indic-machine.rl" + {te = p;p--;{ found_syllable (consonant_syllable); }} + break; + case 16: +#line 90 "../../src/hb-ot-shape-complex-indic-machine.rl" + {te = p;p--;{ found_syllable (vowel_syllable); }} + break; + case 20: +#line 91 "../../src/hb-ot-shape-complex-indic-machine.rl" + {te = p;p--;{ found_syllable (standalone_cluster); }} + break; + case 22: +#line 92 "../../src/hb-ot-shape-complex-indic-machine.rl" + {te = p;p--;{ found_syllable (avagraha_cluster); }} + break; + case 18: +#line 93 "../../src/hb-ot-shape-complex-indic-machine.rl" + {te = p;p--;{ found_syllable (broken_cluster); }} + break; + case 19: +#line 94 "../../src/hb-ot-shape-complex-indic-machine.rl" + {te = p;p--;{ found_syllable (non_indic_cluster); }} + break; + case 1: +#line 89 "../../src/hb-ot-shape-complex-indic-machine.rl" + {{p = ((te))-1;}{ found_syllable (consonant_syllable); }} + break; + case 3: +#line 90 "../../src/hb-ot-shape-complex-indic-machine.rl" + {{p = ((te))-1;}{ found_syllable (vowel_syllable); }} + break; + case 7: +#line 91 "../../src/hb-ot-shape-complex-indic-machine.rl" + {{p = ((te))-1;}{ found_syllable (standalone_cluster); }} + break; + case 4: +#line 93 "../../src/hb-ot-shape-complex-indic-machine.rl" + {{p = ((te))-1;}{ found_syllable (broken_cluster); }} + break; + case 5: +#line 1 "NONE" + { switch( act ) { + case 1: + {{p = ((te))-1;} found_syllable (consonant_syllable); } + break; + case 5: + {{p = ((te))-1;} found_syllable (broken_cluster); } + break; + case 6: + {{p = ((te))-1;} found_syllable (non_indic_cluster); } + break; + } + } + break; + case 8: +#line 1 "NONE" + {te = p+1;} +#line 89 "../../src/hb-ot-shape-complex-indic-machine.rl" + {act = 1;} + break; + case 6: +#line 1 "NONE" + {te = p+1;} +#line 93 "../../src/hb-ot-shape-complex-indic-machine.rl" + {act = 5;} + break; + case 12: +#line 1 "NONE" + {te = p+1;} +#line 94 "../../src/hb-ot-shape-complex-indic-machine.rl" + {act = 6;} + break; +#line 1796 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp" + } + +_again: + switch ( _indic_syllable_machine_to_state_actions[cs] ) { + case 9: +#line 1 "NONE" + {ts = 0;} + break; +#line 1805 "../../src/hb-ot-shape-complex-indic-machine.hh.tmp" + } + + if ( ++p != pe ) + goto _resume; + _test_eof: {} + if ( p == eof ) + { + if ( _indic_syllable_machine_eof_trans[cs] > 0 ) { + _trans = _indic_syllable_machine_eof_trans[cs] - 1; + goto _eof_trans; + } + } + + } + +#line 128 "../../src/hb-ot-shape-complex-indic-machine.rl" + +} + +#endif /* HB_OT_SHAPE_COMPLEX_INDIC_MACHINE_HH */ diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic-machine.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic-machine.rl index f9f07d801d9..5c3e734eb33 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic-machine.rl +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic-machine.rl @@ -51,13 +51,15 @@ VD = 9; A = 10; NBSP = 11; DOTTEDCIRCLE = 12; -RS = 13; +RS = 13; Coeng = 14; Repha = 15; Ra = 16; CM = 17; +Avag = 18; +CM2 = 31; -c = (C | Ra)CM*; # is_consonant +c = (C | Ra); # is_consonant n = ((ZWNJ?.RS)? (N.N?)?); # is_consonant_modifier z = ZWJ|ZWNJ; # is_joiner h = H | Coeng; # is_halant_or_coeng @@ -65,24 +67,29 @@ reph = (Ra H | Repha); # possible reph cn = c.ZWJ?.n?; forced_rakar = ZWJ H ZWJ Ra; +avagraha = Avag.N?; matra_group = z{0,3}.M.N?.(H | forced_rakar)?; -syllable_tail = (Coeng (cn|V))? (SM.ZWNJ?)? (VD VD?)?; +syllable_tail2 = (SM.SM?.ZWNJ?)? (A.A?)? VD?; +syllable_tail = (Coeng (cn|V))? avagraha? syllable_tail2; place_holder = NBSP | DOTTEDCIRCLE; halant_group = (z?.h.(ZWJ.N?)?); final_halant_group = halant_group | h.ZWNJ; +medial_group = CM?.CM2?; halant_or_matra_group = (final_halant_group | (h.ZWJ)? matra_group{0,4}); -consonant_syllable = Repha? (cn.halant_group){0,4} cn A? halant_or_matra_group? syllable_tail; -vowel_syllable = reph? V.n? (ZWJ | (halant_group.cn){0,4} halant_or_matra_group? syllable_tail); -standalone_cluster = reph? place_holder.n? (halant_group.cn){0,4} halant_or_matra_group? syllable_tail; -broken_cluster = reph? n? (halant_group.cn){0,4} halant_or_matra_group syllable_tail; +consonant_syllable = Repha? (cn.halant_group){0,4} cn medial_group halant_or_matra_group syllable_tail; +vowel_syllable = reph? V.n? (ZWJ | (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail); +standalone_cluster = reph? place_holder.n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail; +avagraha_cluster = avagraha syllable_tail2; +broken_cluster = reph? n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail; other = any; main := |* consonant_syllable => { found_syllable (consonant_syllable); }; vowel_syllable => { found_syllable (vowel_syllable); }; standalone_cluster => { found_syllable (standalone_cluster); }; + avagraha_cluster => { found_syllable (avagraha_cluster); }; broken_cluster => { found_syllable (broken_cluster); }; other => { found_syllable (non_indic_cluster); }; *|; diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic-private.hh index 39268b14533..3de5c203fa3 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic-private.hh @@ -43,23 +43,25 @@ * Not sure how to avoid duplication. */ enum indic_category_t { OT_X = 0, - OT_C, - OT_V, - OT_N, - OT_H, - OT_ZWNJ, - OT_ZWJ, - OT_M, - OT_SM, - OT_VD, - OT_A, - OT_NBSP, - OT_DOTTEDCIRCLE, /* Not in the spec, but special in Uniscribe. /Very very/ special! */ - OT_RS, /* Register Shifter, used in Khmer OT spec */ - OT_Coeng, - OT_Repha, - OT_Ra, /* Not explicitly listed in the OT spec, but used in the grammar. */ - OT_CM + OT_C = 1, + OT_V = 2, + OT_N = 3, + OT_H = 4, + OT_ZWNJ = 5, + OT_ZWJ = 6, + OT_M = 7, + OT_SM = 8, + OT_VD = 9, + OT_A = 10, + OT_NBSP = 11, + OT_DOTTEDCIRCLE = 12, + OT_RS = 13, /* Register Shifter, used in Khmer OT spec. */ + OT_Coeng = 14, /* Khmer-style Virama. */ + OT_Repha = 15, /* Atomically-encoded logical or visual repha. */ + OT_Ra = 16, + OT_CM = 17, /* Consonant-Medial. */ + OT_Avag = 18, /* Avagraha. */ + OT_CM2 = 31 /* Consonant-Medial, second slot. */ }; /* Visual positions in a syllable from left to right. */ @@ -93,7 +95,7 @@ enum indic_position_t { enum indic_syllabic_category_t { INDIC_SYLLABIC_CATEGORY_OTHER = OT_X, - INDIC_SYLLABIC_CATEGORY_AVAGRAHA = OT_X, + INDIC_SYLLABIC_CATEGORY_AVAGRAHA = OT_Avag, INDIC_SYLLABIC_CATEGORY_BINDU = OT_SM, INDIC_SYLLABIC_CATEGORY_CONSONANT = OT_C, INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD = OT_C, @@ -101,7 +103,7 @@ enum indic_syllabic_category_t { INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER = OT_C, INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL = OT_CM, INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER = OT_NBSP, - INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED = OT_C, + 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, diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic-table.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic-table.cc index 18a022bc507..18a022bc507 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic-table.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic-table.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic.cc index d3c475b6abb..9edefe305dc 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-indic.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-indic.cc @@ -128,14 +128,6 @@ static const hb_codepoint_t ra_chars[] = { 0x179A, /* Khmer */ /* No Reph, Visual Repha */ }; -static inline indic_position_t -consonant_position (hb_codepoint_t u) -{ - if ((u & ~0x007F) == 0x1780) - return POS_BELOW_C; /* In Khmer coeng model, post and below forms should not be reordered. */ - return POS_BASE_C; /* Will recategorize later based on font lookups. */ -} - static inline bool is_ra (hb_codepoint_t u) { @@ -149,7 +141,7 @@ static inline bool is_one_of (const hb_glyph_info_t &info, unsigned int flags) { /* If it ligated, all bets are off. */ - if (is_a_ligature (info)) return false; + if (_hb_glyph_info_ligated (&info)) return false; return !!(FLAG (info.indic_category()) & flags); } @@ -160,12 +152,14 @@ is_joiner (const hb_glyph_info_t &info) return is_one_of (info, JOINER_FLAGS); } +#define MEDIAL_FLAGS (FLAG (OT_CM) | FLAG (OT_CM2)) + /* Note: * * We treat Vowels and placeholders as if they were consonants. This is safe because Vowels * cannot happen in a consonant syllable. The plus side however is, we can call the * consonant syllable logic from the vowel syllable function and get it all right! */ -#define CONSONANT_FLAGS (FLAG (OT_C) | FLAG (OT_CM) | FLAG (OT_Ra) | FLAG (OT_V) | FLAG (OT_NBSP) | FLAG (OT_DOTTEDCIRCLE)) +#define CONSONANT_FLAGS (FLAG (OT_C) | FLAG (OT_Ra) | MEDIAL_FLAGS | FLAG (OT_V) | FLAG (OT_NBSP) | FLAG (OT_DOTTEDCIRCLE)) static inline bool is_consonant (const hb_glyph_info_t &info) { @@ -194,15 +188,15 @@ set_indic_properties (hb_glyph_info_t &info) /* The spec says U+0952 is OT_A. However, testing shows that Uniscribe - * treats U+0951..U+0952 all as OT_VD. + * treats U+0951..U+0954 all behave similarly. * TESTS: * U+092E,U+0947,U+0952 * U+092E,U+0952,U+0947 * U+092E,U+0947,U+0951 * U+092E,U+0951,U+0947 - * */ + */ if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x0951, 0x0954))) - cat = OT_VD; + cat = OT_A; if (unlikely (u == 0x17D1)) cat = OT_X; @@ -220,7 +214,10 @@ set_indic_properties (hb_glyph_info_t &info) else if (unlikely (u == 0x200C)) cat = OT_ZWNJ; else if (unlikely (u == 0x200D)) cat = OT_ZWJ; else if (unlikely (u == 0x25CC)) cat = OT_DOTTEDCIRCLE; - else if (unlikely (u == 0x0A71)) cat = OT_SM; /* GURMUKHI ADDAK. More like consonant medial. like 0A75. */ + 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. */ if (cat == OT_Repha) { /* There are two kinds of characters marked as Repha: @@ -241,7 +238,7 @@ set_indic_properties (hb_glyph_info_t &info) if ((FLAG (cat) & CONSONANT_FLAGS)) { - pos = consonant_position (u); + pos = POS_BASE_C; if (is_ra (u)) cat = OT_Ra; } @@ -249,7 +246,7 @@ set_indic_properties (hb_glyph_info_t &info) { pos = matra_position (u, pos); } - else if (cat == OT_SM || cat == OT_VD) + else if ((FLAG (cat) & (FLAG (OT_SM) | FLAG (OT_VD) | FLAG (OT_A) | FLAG (OT_Avag)))) { pos = POS_SMVD; } @@ -277,16 +274,16 @@ set_indic_properties (hb_glyph_info_t &info) enum base_position_t { BASE_POS_FIRST, + BASE_POS_LAST_SINHALA, BASE_POS_LAST }; enum reph_position_t { - REPH_POS_DEFAULT = POS_BEFORE_POST, - REPH_POS_AFTER_MAIN = POS_AFTER_MAIN, REPH_POS_BEFORE_SUB = POS_BEFORE_SUB, REPH_POS_AFTER_SUB = POS_AFTER_SUB, REPH_POS_BEFORE_POST = POS_BEFORE_POST, - REPH_POS_AFTER_POST = POS_AFTER_POST + REPH_POS_AFTER_POST = POS_AFTER_POST, + REPH_POS_DONT_CARE = POS_RA_TO_BECOME_REPH }; enum reph_mode_t { REPH_MODE_IMPLICIT, /* Reph formed out of initial Ra,H sequence. */ @@ -294,6 +291,15 @@ enum reph_mode_t { REPH_MODE_VIS_REPHA, /* Encoded Repha character, no reordering needed. */ REPH_MODE_LOG_REPHA /* Encoded Repha character, needs reordering. */ }; +enum blwf_mode_t { + BLWF_MODE_PRE_AND_POST, /* Below-forms feature applied to pre-base and post-base. */ + BLWF_MODE_POST_ONLY /* Below-forms feature applied to post-base only. */ +}; +enum pref_len_t { + PREF_LEN_1 = 1, + PREF_LEN_2 = 2, + PREF_LEN_DONT_CARE = PREF_LEN_2 +}; struct indic_config_t { hb_script_t script; @@ -302,24 +308,27 @@ struct indic_config_t base_position_t base_pos; reph_position_t reph_pos; reph_mode_t reph_mode; + blwf_mode_t blwf_mode; + pref_len_t pref_len; }; static const indic_config_t indic_configs[] = { /* Default. Should be first. */ - {HB_SCRIPT_INVALID, false, 0,BASE_POS_LAST, REPH_POS_DEFAULT, REPH_MODE_IMPLICIT}, - {HB_SCRIPT_DEVANAGARI,true, 0x094D,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT}, - {HB_SCRIPT_BENGALI, true, 0x09CD,BASE_POS_LAST, REPH_POS_AFTER_SUB, REPH_MODE_IMPLICIT}, - {HB_SCRIPT_GURMUKHI, true, 0x0A4D,BASE_POS_LAST, REPH_POS_BEFORE_SUB, REPH_MODE_IMPLICIT}, - {HB_SCRIPT_GUJARATI, true, 0x0ACD,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT}, - {HB_SCRIPT_ORIYA, true, 0x0B4D,BASE_POS_LAST, REPH_POS_AFTER_MAIN, REPH_MODE_IMPLICIT}, - {HB_SCRIPT_TAMIL, true, 0x0BCD,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_IMPLICIT}, - {HB_SCRIPT_TELUGU, true, 0x0C4D,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_EXPLICIT}, - {HB_SCRIPT_KANNADA, true, 0x0CCD,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_IMPLICIT}, - {HB_SCRIPT_MALAYALAM, true, 0x0D4D,BASE_POS_LAST, REPH_POS_AFTER_MAIN, REPH_MODE_LOG_REPHA}, - {HB_SCRIPT_SINHALA, false,0x0DCA,BASE_POS_FIRST,REPH_POS_AFTER_MAIN, REPH_MODE_EXPLICIT}, - {HB_SCRIPT_KHMER, false,0x17D2,BASE_POS_FIRST,REPH_POS_DEFAULT, REPH_MODE_VIS_REPHA}, - {HB_SCRIPT_JAVANESE, false,0xA9C0,BASE_POS_LAST, REPH_POS_DEFAULT, REPH_MODE_IMPLICIT}, + {HB_SCRIPT_INVALID, false, 0,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_1}, + {HB_SCRIPT_DEVANAGARI,true, 0x094D,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE}, + {HB_SCRIPT_BENGALI, true, 0x09CD,BASE_POS_LAST, REPH_POS_AFTER_SUB, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE}, + {HB_SCRIPT_GURMUKHI, true, 0x0A4D,BASE_POS_LAST, REPH_POS_BEFORE_SUB, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE}, + {HB_SCRIPT_GUJARATI, true, 0x0ACD,BASE_POS_LAST, REPH_POS_BEFORE_POST,REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE}, + {HB_SCRIPT_ORIYA, true, 0x0B4D,BASE_POS_LAST, REPH_POS_AFTER_MAIN, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE}, + {HB_SCRIPT_TAMIL, true, 0x0BCD,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_IMPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_2}, + {HB_SCRIPT_TELUGU, true, 0x0C4D,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_EXPLICIT, BLWF_MODE_POST_ONLY, PREF_LEN_2}, + {HB_SCRIPT_KANNADA, true, 0x0CCD,BASE_POS_LAST, REPH_POS_AFTER_POST, REPH_MODE_IMPLICIT, BLWF_MODE_POST_ONLY, PREF_LEN_2}, + {HB_SCRIPT_MALAYALAM, true, 0x0D4D,BASE_POS_LAST, REPH_POS_AFTER_MAIN, REPH_MODE_LOG_REPHA,BLWF_MODE_PRE_AND_POST, PREF_LEN_2}, + {HB_SCRIPT_SINHALA, false,0x0DCA,BASE_POS_LAST_SINHALA, + REPH_POS_AFTER_MAIN, REPH_MODE_EXPLICIT, BLWF_MODE_PRE_AND_POST, PREF_LEN_DONT_CARE}, + {HB_SCRIPT_KHMER, false,0x17D2,BASE_POS_FIRST,REPH_POS_DONT_CARE, REPH_MODE_VIS_REPHA,BLWF_MODE_PRE_AND_POST, PREF_LEN_2}, + {HB_SCRIPT_JAVANESE, false,0xA9C0,BASE_POS_FIRST,REPH_POS_DONT_CARE, REPH_MODE_VIS_REPHA,BLWF_MODE_PRE_AND_POST, PREF_LEN_1}, }; @@ -346,15 +355,17 @@ indic_features[] = {HB_TAG('r','k','r','f'), F_GLOBAL}, {HB_TAG('p','r','e','f'), F_NONE}, {HB_TAG('b','l','w','f'), F_NONE}, - {HB_TAG('h','a','l','f'), F_NONE}, {HB_TAG('a','b','v','f'), F_NONE}, + {HB_TAG('h','a','l','f'), F_NONE}, {HB_TAG('p','s','t','f'), F_NONE}, - {HB_TAG('c','f','a','r'), F_NONE}, {HB_TAG('v','a','t','u'), F_GLOBAL}, {HB_TAG('c','j','c','t'), F_GLOBAL}, + {HB_TAG('c','f','a','r'), F_NONE}, /* * Other features. * These features are applied all at once, after final_reordering. + * Default Bengali font in Windows for example has intermixed + * lookups for init,pres,abvs,blws features. */ {HB_TAG('i','n','i','t'), F_NONE}, {HB_TAG('p','r','e','s'), F_GLOBAL}, @@ -378,12 +389,12 @@ enum { _RKRF, PREF, BLWF, - HALF, ABVF, + HALF, PSTF, - CFAR, _VATU, _CJCT, + CFAR, INIT, _PRES, @@ -411,6 +422,10 @@ static void final_reordering (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer); +static void +clear_syllables (const hb_ot_shape_plan_t *plan, + hb_font_t *font, + hb_buffer_t *buffer); static void collect_features_indic (hb_ot_shape_planner_t *plan) @@ -436,14 +451,26 @@ collect_features_indic (hb_ot_shape_planner_t *plan) for (; i < INDIC_NUM_FEATURES; i++) { map->add_feature (indic_features[i].tag, 1, indic_features[i].flags | F_MANUAL_ZWJ); } + + map->add_global_bool_feature (HB_TAG('c','a','l','t')); + map->add_global_bool_feature (HB_TAG('c','l','i','g')); + + map->add_gsub_pause (clear_syllables); } static void override_features_indic (hb_ot_shape_planner_t *plan) { - /* Uniscribe does not apply 'kern'. */ + /* Uniscribe does not apply 'kern' in Khmer. */ if (hb_options ().uniscribe_bug_compatible) - plan->map.add_feature (HB_TAG('k','e','r','n'), 0, F_GLOBAL); + { + switch ((hb_tag_t) plan->props.script) + { + case HB_SCRIPT_KHMER: + plan->map.add_feature (HB_TAG('k','e','r','n'), 0, F_GLOBAL); + break; + } + } plan->map.add_feature (HB_TAG('l','i','g','a'), 0, F_GLOBAL); } @@ -451,8 +478,9 @@ override_features_indic (hb_ot_shape_planner_t *plan) struct would_substitute_feature_t { - inline void init (const hb_ot_map_t *map, hb_tag_t feature_tag) + inline void init (const hb_ot_map_t *map, hb_tag_t feature_tag, bool zero_context_) { + zero_context = zero_context_; map->get_stage_lookups (0/*GSUB*/, map->get_feature_stage (0/*GSUB*/, feature_tag), &lookups, &count); @@ -460,7 +488,6 @@ struct would_substitute_feature_t inline bool would_substitute (const hb_codepoint_t *glyphs, unsigned int glyphs_count, - bool zero_context, hb_face_t *face) const { for (unsigned int i = 0; i < count; i++) @@ -472,6 +499,7 @@ struct would_substitute_feature_t private: const hb_ot_map_t::lookup_map_t *lookups; unsigned int count; + bool zero_context; }; struct indic_shape_plan_t @@ -527,10 +555,13 @@ data_create_indic (const hb_ot_shape_plan_t *plan) indic_plan->is_old_spec = indic_plan->config->has_old_spec && ((plan->map.chosen_script[0] & 0x000000FF) != '2'); indic_plan->virama_glyph = (hb_codepoint_t) -1; - indic_plan->rphf.init (&plan->map, HB_TAG('r','p','h','f')); - indic_plan->pref.init (&plan->map, HB_TAG('p','r','e','f')); - indic_plan->blwf.init (&plan->map, HB_TAG('b','l','w','f')); - indic_plan->pstf.init (&plan->map, HB_TAG('p','s','t','f')); + /* Use zero-context would_substitute() matching for new-spec of the main + * Indic scripts, but not for old-spec or scripts with one spec only. */ + bool zero_context = indic_plan->config->has_old_spec || !indic_plan->is_old_spec; + indic_plan->rphf.init (&plan->map, HB_TAG('r','p','h','f'), zero_context); + indic_plan->pref.init (&plan->map, HB_TAG('p','r','e','f'), zero_context); + indic_plan->blwf.init (&plan->map, HB_TAG('b','l','w','f'), zero_context); + indic_plan->pstf.init (&plan->map, HB_TAG('p','s','t','f'), zero_context); for (unsigned int i = 0; i < ARRAY_LENGTH (indic_plan->mask_array); i++) indic_plan->mask_array[i] = (indic_features[i].flags & F_GLOBAL) ? @@ -547,7 +578,8 @@ data_destroy_indic (void *data) static indic_position_t consonant_position_from_face (const indic_shape_plan_t *indic_plan, - const hb_codepoint_t glyphs[2], + const hb_codepoint_t consonant, + const hb_codepoint_t virama, hb_face_t *face) { /* For old-spec, the order of glyphs is Consonant,Virama, @@ -560,16 +592,19 @@ consonant_position_from_face (const indic_shape_plan_t *indic_plan, * 930,94D in 'blwf', not the expected 94D,930 (with new-spec * table). As such, we simply match both sequences. Seems * to work. */ - bool zero_context = indic_plan->is_old_spec ? false : true; - hb_codepoint_t glyphs_r[2] = {glyphs[1], glyphs[0]}; - if (indic_plan->pref.would_substitute (glyphs , 2, zero_context, face) || - indic_plan->pref.would_substitute (glyphs_r, 2, zero_context, face)) - return POS_POST_C; - if (indic_plan->blwf.would_substitute (glyphs , 2, zero_context, face) || - indic_plan->blwf.would_substitute (glyphs_r, 2, zero_context, face)) + hb_codepoint_t glyphs[3] = {virama, consonant, virama}; + if (indic_plan->blwf.would_substitute (glyphs , 2, face) || + indic_plan->blwf.would_substitute (glyphs+1, 2, face)) return POS_BELOW_C; - if (indic_plan->pstf.would_substitute (glyphs , 2, zero_context, face) || - indic_plan->pstf.would_substitute (glyphs_r, 2, zero_context, face)) + if (indic_plan->pstf.would_substitute (glyphs , 2, face) || + indic_plan->pstf.would_substitute (glyphs+1, 2, face)) + return POS_POST_C; + unsigned int pref_len = indic_plan->config->pref_len; + if ((pref_len == PREF_LEN_2 && + (indic_plan->pref.would_substitute (glyphs , 2, face) || + indic_plan->pref.would_substitute (glyphs+1, 2, face))) + || (pref_len == PREF_LEN_1 && + indic_plan->pref.would_substitute (glyphs+1, 1, face))) return POS_POST_C; return POS_BASE_C; } @@ -579,6 +614,7 @@ enum syllable_type_t { consonant_syllable, vowel_syllable, standalone_cluster, + avagraha_cluster, broken_cluster, non_indic_cluster, }; @@ -628,15 +664,18 @@ update_consonant_positions (const hb_ot_shape_plan_t *plan, { const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data; - hb_codepoint_t glyphs[2]; - if (indic_plan->get_virama_glyph (font, &glyphs[0])) + if (indic_plan->config->base_pos != BASE_POS_LAST) + return; + + hb_codepoint_t virama; + if (indic_plan->get_virama_glyph (font, &virama)) { hb_face_t *face = font->face; unsigned int count = buffer->len; for (unsigned int i = 0; i < count; i++) if (buffer->info[i].indic_position() == POS_BASE_C) { - glyphs[1] = buffer->info[i].codepoint; - buffer->info[i].indic_position() = consonant_position_from_face (indic_plan, glyphs, face); + hb_codepoint_t consonant = buffer->info[i].codepoint; + buffer->info[i].indic_position() = consonant_position_from_face (indic_plan, consonant, virama, face); } } } @@ -677,7 +716,8 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, * and has more than one consonant, Ra is excluded from candidates for * base consonants. */ unsigned int limit = start; - if (indic_plan->mask_array[RPHF] && + if (indic_plan->config->reph_pos != REPH_POS_DONT_CARE && + indic_plan->mask_array[RPHF] && start + 3 <= end && ( (indic_plan->config->reph_mode == REPH_MODE_IMPLICIT && !is_joiner (info[start + 2])) || @@ -686,7 +726,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, { /* See if it matches the 'rphf' feature. */ hb_codepoint_t glyphs[2] = {info[start].codepoint, info[start + 1].codepoint}; - if (indic_plan->rphf.would_substitute (glyphs, ARRAY_LENGTH (glyphs), true, face)) + if (indic_plan->rphf.would_substitute (glyphs, ARRAY_LENGTH (glyphs), face)) { limit += 2; while (limit < end && is_joiner (info[limit])) @@ -758,9 +798,12 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, } break; - case BASE_POS_FIRST: + case BASE_POS_LAST_SINHALA: { - /* In scripts without half forms (eg. Khmer), the first consonant is always the base. */ + /* Sinhala base positioning is slightly different from main Indic, in that: + * 1. It's ZWJ behavior is different, + * 2. We don't need to look into the font for consonant positions. + */ if (!has_reph) base = limit; @@ -768,7 +811,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, /* Find the last base consonant that is not blocked by ZWJ. If there is * a ZWJ right before a base consonant, that would request a subjoined form. */ for (unsigned int i = limit; i < end; i++) - if (is_consonant (info[i]) && info[i].indic_position() == POS_BASE_C) + if (is_consonant (info[i])) { if (limit < i && info[i - 1].indic_category() == OT_ZWJ) break; @@ -778,7 +821,23 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, /* Mark all subsequent consonants as below. */ for (unsigned int i = base + 1; i < end; i++) - if (is_consonant (info[i]) && info[i].indic_position() == POS_BASE_C) + if (is_consonant (info[i])) + info[i].indic_position() = POS_BELOW_C; + } + break; + + case BASE_POS_FIRST: + { + /* The first consonant is always the base. */ + + assert (indic_plan->config->reph_mode == REPH_MODE_VIS_REPHA); + assert (!has_reph); + + base = start; + + /* Mark all subsequent consonants as below. */ + for (unsigned int i = base + 1; i < end; i++) + if (is_consonant (info[i])) info[i].indic_position() = POS_BELOW_C; } break; @@ -877,7 +936,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, indic_position_t last_pos = POS_START; for (unsigned int i = start; i < end; i++) { - if ((FLAG (info[i].indic_category()) & (JOINER_FLAGS | FLAG (OT_N) | FLAG (OT_RS) | HALANT_OR_COENG_FLAGS))) + if ((FLAG (info[i].indic_category()) & (JOINER_FLAGS | FLAG (OT_N) | FLAG (OT_RS) | MEDIAL_FLAGS | HALANT_OR_COENG_FLAGS))) { info[i].indic_position() = last_pos; if (unlikely (info[i].indic_category() == OT_H && @@ -903,33 +962,68 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, } } } - /* Re-attach ZWJ, ZWNJ, and halant to next char, for after-base consonants. */ + /* For post-base consonants let them own anything before them + * since the last consonant or matra. */ { - unsigned int last_halant = end; + unsigned int last = base; for (unsigned int i = base + 1; i < end; i++) - if (is_halant_or_coeng (info[i])) - last_halant = i; - else if (is_consonant (info[i])) { - for (unsigned int j = last_halant; j < i; j++) - if (info[j].indic_position() != POS_SMVD) + if (is_consonant (info[i])) + { + for (unsigned int j = last + 1; j < i; j++) + if (info[j].indic_position() < POS_SMVD) info[j].indic_position() = info[i].indic_position(); - } + last = i; + } else if (info[i].indic_category() == OT_M) + last = i; } + { - /* Things are out-of-control for post base positions, they may shuffle - * around like crazy, so merge clusters. For pre-base stuff, we handle - * cluster issues in final reordering. */ - buffer->merge_clusters (base, end); + /* Use syllable() for sort accounting temporarily. */ + unsigned int syllable = info[start].syllable(); + for (unsigned int i = start; i < end; i++) + info[i].syllable() = i - start; + /* Sit tight, rock 'n roll! */ hb_bubble_sort (info + start, end - start, compare_indic_order); /* Find base again */ base = end; for (unsigned int i = start; i < end; i++) - if (info[i].indic_position() == POS_BASE_C) { - base = i; + if (info[i].indic_position() == POS_BASE_C) + { + base = i; break; } + /* Things are out-of-control for post base positions, they may shuffle + * around like crazy. In old-spec mode, we move halants around, so in + * that case merge all clusters after base. Otherwise, check the sort + * order and merge as needed. + * For pre-base stuff, we handle cluster issues in final reordering. */ + if (indic_plan->is_old_spec || end - base > 127) + buffer->merge_clusters (base, end); + else + { + /* Note! syllable() is a one-byte field. */ + for (unsigned int i = base; i < end; i++) + if (info[i].syllable() != 255) + { + unsigned int max = i; + unsigned int j = start + info[i].syllable(); + while (j != i) + { + max = MAX (max, j); + unsigned int next = start + info[j].syllable(); + info[j].syllable() = 255; /* So we don't process j later again. */ + j = next; + } + if (i != max) + buffer->merge_clusters (i, max + 1); + } + } + + /* Put syllable back in. */ + for (unsigned int i = start; i < end; i++) + info[i].syllable() = syllable; } /* Setup masks now */ @@ -943,6 +1037,9 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, /* Pre-base */ mask = indic_plan->mask_array[HALF]; + if (!indic_plan->is_old_spec && + indic_plan->config->blwf_mode == BLWF_MODE_PRE_AND_POST) + mask |= indic_plan->mask_array[BLWF]; for (unsigned int i = start; i < base; i++) info[i].mask |= mask; /* Base */ @@ -987,15 +1084,19 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, } } - if (indic_plan->mask_array[PREF] && base + 2 < end) + unsigned int pref_len = indic_plan->config->pref_len; + if (indic_plan->mask_array[PREF] && base + pref_len < end) { + assert (1 <= pref_len && pref_len <= 2); /* Find a Halant,Ra sequence and mark it for pre-base reordering processing. */ - for (unsigned int i = base + 1; i + 1 < end; i++) { - hb_codepoint_t glyphs[2] = {info[i].codepoint, info[i + 1].codepoint}; - if (indic_plan->pref.would_substitute (glyphs, ARRAY_LENGTH (glyphs), true, face)) + for (unsigned int i = base + 1; i + pref_len - 1 < end; i++) { + hb_codepoint_t glyphs[2]; + for (unsigned int j = 0; j < pref_len; j++) + glyphs[j] = info[i + j].codepoint; + if (indic_plan->pref.would_substitute (glyphs, pref_len, face)) { - info[i++].mask |= indic_plan->mask_array[PREF]; - info[i++].mask |= indic_plan->mask_array[PREF]; + for (unsigned int j = 0; j < pref_len; j++) + info[i++].mask |= indic_plan->mask_array[PREF]; /* Mark the subsequent stuff with 'cfar'. Used in Khmer. * Read the feature spec. @@ -1003,8 +1104,9 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, * U+1784,U+17D2,U+179A,U+17D2,U+1782 * U+1784,U+17D2,U+1782,U+17D2,U+179A */ - for (; i < end; i++) - info[i].mask |= indic_plan->mask_array[CFAR]; + if (indic_plan->mask_array[CFAR]) + for (; i < end; i++) + info[i].mask |= indic_plan->mask_array[CFAR]; break; } @@ -1075,6 +1177,16 @@ initial_reordering_broken_cluster (const hb_ot_shape_plan_t *plan, } static void +initial_reordering_avagraha_cluster (const hb_ot_shape_plan_t *plan HB_UNUSED, + hb_face_t *face HB_UNUSED, + hb_buffer_t *buffer HB_UNUSED, + unsigned int start HB_UNUSED, unsigned int end HB_UNUSED) +{ + /* Nothing to do right now. If we ever switch to using the output + * buffer in the reordering process, we'd need to next_glyph() here. */ +} + +static void initial_reordering_non_indic_cluster (const hb_ot_shape_plan_t *plan HB_UNUSED, hb_face_t *face HB_UNUSED, hb_buffer_t *buffer HB_UNUSED, @@ -1096,6 +1208,7 @@ initial_reordering_syllable (const hb_ot_shape_plan_t *plan, case consonant_syllable: initial_reordering_consonant_syllable (plan, face, buffer, start, end); return; case vowel_syllable: initial_reordering_vowel_syllable (plan, face, buffer, start, end); return; case standalone_cluster: initial_reordering_standalone_cluster (plan, face, buffer, start, end); return; + case avagraha_cluster: initial_reordering_avagraha_cluster (plan, face, buffer, start, end); return; case broken_cluster: initial_reordering_broken_cluster (plan, face, buffer, start, end); return; case non_indic_cluster: initial_reordering_non_indic_cluster (plan, face, buffer, start, end); return; } @@ -1265,9 +1378,9 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan, info[new_pos] = tmp; if (old_pos < base && base <= new_pos) /* Shouldn't actually happen. */ base--; + buffer->merge_clusters (new_pos, MIN (end, base + 1)); new_pos--; } - buffer->merge_clusters (new_pos, MIN (end, base + 1)); } else { for (unsigned int i = start; i < base; i++) if (info[i].indic_position () == POS_PRE_M) { @@ -1287,17 +1400,24 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan, * before post-base consonant forms, and after post-base consonant forms. */ - /* If there's anything after the Ra that has the REPH pos, it ought to be halant. - * Which means that the font has failed to ligate the Reph. In which case, we - * shouldn't move. */ + /* Two cases: + * + * - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then + * we should only move it if the sequence ligated to the repha form. + * + * - If repha is encoded separately and in the logical position, we should only + * move it if it did NOT ligate. If it ligated, it's probably the font trying + * to make it work without the reordering. + */ if (start + 1 < end && info[start].indic_position() == POS_RA_TO_BECOME_REPH && - info[start + 1].indic_position() != POS_RA_TO_BECOME_REPH) + ((info[start].indic_category() == OT_Repha) ^ + _hb_glyph_info_ligated (&info[start]))) { unsigned int new_reph_pos; reph_position_t reph_pos = indic_plan->config->reph_pos; - /* XXX Figure out old behavior too */ + assert (reph_pos != REPH_POS_DONT_CARE); /* 1. If reph should be positioned after post-base consonant forms, * proceed to step 5. @@ -1339,7 +1459,6 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan, if (reph_pos == REPH_POS_AFTER_MAIN) { new_reph_pos = base; - /* XXX Skip potential pre-base reordering Ra. */ while (new_reph_pos + 1 < end && info[new_reph_pos + 1].indic_position() <= POS_AFTER_MAIN) new_reph_pos++; if (new_reph_pos < end) @@ -1412,8 +1531,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan, reph_move: { - /* Yay, one big cluster! Merge before moving. */ - buffer->merge_clusters (start, end); + buffer->merge_clusters (start, new_reph_pos + 1); /* Move */ hb_glyph_info_t reph = info[start]; @@ -1433,6 +1551,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan, if (indic_plan->mask_array[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++) if ((info[i].mask & indic_plan->mask_array[PREF]) != 0) { @@ -1440,7 +1559,13 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan, * of the <pref> feature. (Note that a font may shape a Ra consonant with * the feature generally but block it in certain contexts.) */ - if (i + 1 == end || (info[i + 1].mask & indic_plan->mask_array[PREF]) == 0) + /* Note: We just check that something got substituted. We don't check that + * the <pref> feature actually did it... + * + * 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]))) { /* * 2. Try to find a target position the same way as for pre-base matra. @@ -1461,7 +1586,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan, !(is_one_of (info[new_pos - 1], FLAG(OT_M) | HALANT_OR_COENG_FLAGS))) new_pos--; - /* In Khmer coeng model, a V,Ra can go *after* matras. If it goes after a + /* In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a * split matra, it should be reordered to *before* the left part of such matra. */ if (new_pos > start && info[new_pos - 1].indic_category() == OT_M) { @@ -1511,11 +1636,20 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan, */ if (hb_options ().uniscribe_bug_compatible) { - /* Uniscribe merges the entire cluster. - * This means, half forms are submerged into the main consonants cluster. - * This is unnecessary, and makes cursor positioning harder, but that's what - * Uniscribe does. */ - buffer->merge_clusters (start, end); + switch ((hb_tag_t) plan->props.script) + { + case HB_SCRIPT_TAMIL: + case HB_SCRIPT_SINHALA: + break; + + default: + /* Uniscribe merges the entire cluster... Except for Tamil & Sinhala. + * This means, half forms are submerged into the main consonants cluster. + * This is unnecessary, and makes cursor positioning harder, but that's what + * Uniscribe does. */ + buffer->merge_clusters (start, end); + break; + } } } @@ -1539,15 +1673,23 @@ final_reordering (const hb_ot_shape_plan_t *plan, } final_reordering_syllable (plan, buffer, last, count); - /* Zero syllables now... */ - for (unsigned int i = 0; i < count; i++) - info[i].syllable() = 0; - HB_BUFFER_DEALLOCATE_VAR (buffer, indic_category); HB_BUFFER_DEALLOCATE_VAR (buffer, indic_position); } +static void +clear_syllables (const hb_ot_shape_plan_t *plan HB_UNUSED, + hb_font_t *font HB_UNUSED, + hb_buffer_t *buffer) +{ + hb_glyph_info_t *info = buffer->info; + unsigned int count = buffer->len; + for (unsigned int i = 0; i < count; i++) + info[i].syllable() = 0; +} + + static hb_ot_shape_normalization_mode_t normalization_preference_indic (const hb_segment_properties_t *props HB_UNUSED) { @@ -1627,7 +1769,7 @@ decompose_indic (const hb_ot_shape_normalize_context_t *c, if (hb_options ().uniscribe_bug_compatible || (c->font->get_glyph (ab, 0, &glyph) && - indic_plan->pstf.would_substitute (&glyph, 1, true, c->font->face))) + indic_plan->pstf.would_substitute (&glyph, 1, c->font->face))) { /* Ok, safe to use Uniscribe-style decomposition. */ *a = 0x0DD9; diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-myanmar-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-myanmar-machine.hh index 797bfc5bea0..797bfc5bea0 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-myanmar-machine.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-myanmar-machine.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-myanmar-machine.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-myanmar-machine.rl index 51d42dd64ab..51d42dd64ab 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-myanmar-machine.rl +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-myanmar-machine.rl diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-myanmar.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-myanmar.cc index 29f29bb556b..a32405a8219 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-myanmar.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-myanmar.cc @@ -60,6 +60,16 @@ other_features[] = HB_TAG('p','s','t','s'), /* Positioning features, though we don't care about the types. */ HB_TAG('d','i','s','t'), + /* Pre-release version of Windows 8 Myanmar font had abvm,blwm + * features. The released Windows 8 version of the font (as well + * as the released spec) used 'mark' instead. The Windows 8 + * shaper however didn't apply 'mark' but did apply 'mkmk'. + * Perhaps it applied abvm/blwm. This was fixed in a Windows 8 + * update, so now it applies mark/mkmk. We are guessing that + * it still applies abvm/blwm too. + */ + HB_TAG('a','b','v','m'), + HB_TAG('b','l','w','m'), }; static void @@ -141,7 +151,7 @@ static inline bool is_one_of (const hb_glyph_info_t &info, unsigned int flags) { /* If it ligated, all bets are off. */ - if (is_a_ligature (info)) return false; + if (_hb_glyph_info_ligated (&info)) return false; return !!(FLAG (info.myanmar_category()) & flags); } diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-private.hh index a099e05d748..ac0072ba565 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-private.hh @@ -279,9 +279,6 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner) /* Unicode-3.0 additions */ case HB_SCRIPT_SINHALA: - /* Unicode-4.1 additions */ - case HB_SCRIPT_BUGINESE: - /* Unicode-5.0 additions */ case HB_SCRIPT_BALINESE: @@ -336,6 +333,7 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner) return &_hb_ot_complex_shaper_default; /* Unicode-4.1 additions */ + case HB_SCRIPT_BUGINESE: case HB_SCRIPT_NEW_TAI_LUE: /* Unicode-5.1 additions */ diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-sea-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-sea-machine.hh index 86b7ae7d5ca..86b7ae7d5ca 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-sea-machine.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-sea-machine.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-sea-machine.rl b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-sea-machine.rl index 46140fc4d5f..46140fc4d5f 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-sea-machine.rl +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-sea-machine.rl diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-sea.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-sea.cc index 9c0c303e3df..da687ed6467 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-sea.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-sea.cc @@ -266,7 +266,7 @@ initial_reordering_syllable (const hb_ot_shape_plan_t *plan, switch (syllable_type) { case consonant_syllable: initial_reordering_consonant_syllable (plan, face, buffer, start, end); return; case broken_cluster: initial_reordering_broken_cluster (plan, face, buffer, start, end); return; - case non_sea_cluster: initial_reordering_non_sea_cluster (plan, face, buffer, start, end); return; + case non_sea_cluster: initial_reordering_non_sea_cluster (plan, face, buffer, start, end); return; } } diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-thai.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-thai.cc index 45945339d6b..45945339d6b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-complex-thai.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-complex-thai.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-fallback-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-fallback-private.hh index ec653513f1b..ec653513f1b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-fallback-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-fallback-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-fallback.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-fallback.cc index 284d030d5f4..449b64e5ca7 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-fallback.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-fallback.cc @@ -260,7 +260,13 @@ position_mark (const hb_ot_shape_plan_t *plan, case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT: case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW: - pos.y_offset += base_extents.y_bearing + base_extents.height - mark_extents.y_bearing; + pos.y_offset = base_extents.y_bearing + base_extents.height - mark_extents.y_bearing; + /* Never shift up "below" marks. */ + if ((y_gap > 0) == (pos.y_offset > 0)) + { + base_extents.height -= pos.y_offset; + pos.y_offset = 0; + } base_extents.height += mark_extents.height; break; @@ -274,7 +280,15 @@ position_mark (const hb_ot_shape_plan_t *plan, case HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE: case HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT: - pos.y_offset += base_extents.y_bearing - (mark_extents.y_bearing + mark_extents.height); + pos.y_offset = base_extents.y_bearing - (mark_extents.y_bearing + mark_extents.height); + /* Don't shift down "above" marks too much. */ + if ((y_gap > 0) != (pos.y_offset > 0)) + { + unsigned int correction = -pos.y_offset / 2; + base_extents.y_bearing += correction; + base_extents.height -= correction; + pos.y_offset += correction; + } base_extents.y_bearing -= mark_extents.height; base_extents.height += mark_extents.height; break; @@ -300,8 +314,8 @@ position_around_base (const hb_ot_shape_plan_t *plan, base_extents.x_bearing += buffer->pos[base].x_offset; base_extents.y_bearing += buffer->pos[base].y_offset; - unsigned int lig_id = get_lig_id (buffer->info[base]); - unsigned int num_lig_components = get_lig_num_comps (buffer->info[base]); + unsigned int lig_id = _hb_glyph_info_get_lig_id (&buffer->info[base]); + unsigned int num_lig_components = _hb_glyph_info_get_lig_num_comps (&buffer->info[base]); hb_position_t x_offset = 0, y_offset = 0; if (HB_DIRECTION_IS_FORWARD (buffer->props.direction)) { @@ -317,8 +331,8 @@ position_around_base (const hb_ot_shape_plan_t *plan, if (_hb_glyph_info_get_modified_combining_class (&buffer->info[i])) { if (num_lig_components > 1) { - unsigned int this_lig_id = get_lig_id (buffer->info[i]); - unsigned int this_lig_component = get_lig_comp (buffer->info[i]) - 1; + unsigned int this_lig_id = _hb_glyph_info_get_lig_id (&buffer->info[i]); + unsigned int this_lig_component = _hb_glyph_info_get_lig_comp (&buffer->info[i]) - 1; /* Conditions for attaching to the last component. */ if (!lig_id || lig_id != this_lig_id || this_lig_component >= num_lig_components) this_lig_component = num_lig_components - 1; @@ -416,41 +430,52 @@ _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) { - unsigned int count = buffer->len; hb_mask_t kern_mask = plan->map.get_1_mask (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction) ? HB_TAG ('k','e','r','n') : HB_TAG ('v','k','r','n')); + if (!kern_mask) return; + + unsigned int count = buffer->len; OT::hb_apply_context_t c (1, font, buffer); c.set_lookup_mask (kern_mask); c.set_lookup_props (OT::LookupFlag::IgnoreMarks); - for (buffer->idx = 0; buffer->idx < count;) + hb_glyph_info_t *info = buffer->info; + hb_glyph_position_t *pos = buffer->pos; + + for (unsigned int idx = 0; idx < count;) { - OT::hb_apply_context_t::skipping_forward_iterator_t skippy_iter (&c, buffer->idx, 1); + OT::hb_apply_context_t::skipping_forward_iterator_t skippy_iter (&c, idx, 1); if (!skippy_iter.next ()) { - buffer->idx++; + idx++; continue; } - hb_position_t x_kern, y_kern, kern1, kern2; - font->get_glyph_kerning_for_direction (buffer->info[buffer->idx].codepoint, - buffer->info[skippy_iter.idx].codepoint, + hb_position_t x_kern, y_kern; + font->get_glyph_kerning_for_direction (info[idx].codepoint, + info[skippy_iter.idx].codepoint, buffer->props.direction, &x_kern, &y_kern); - kern1 = x_kern >> 1; - kern2 = x_kern - kern1; - buffer->pos[buffer->idx].x_advance += kern1; - buffer->pos[skippy_iter.idx].x_advance += kern2; - buffer->pos[skippy_iter.idx].x_offset += kern2; + if (x_kern) + { + hb_position_t kern1 = x_kern >> 1; + hb_position_t kern2 = x_kern - kern1; + pos[idx].x_advance += kern1; + pos[skippy_iter.idx].x_advance += kern2; + pos[skippy_iter.idx].x_offset += kern2; + } - kern1 = y_kern >> 1; - kern2 = y_kern - kern1; - buffer->pos[buffer->idx].y_advance += kern1; - buffer->pos[skippy_iter.idx].y_advance += kern2; - buffer->pos[skippy_iter.idx].y_offset += kern2; + if (y_kern) + { + hb_position_t kern1 = y_kern >> 1; + hb_position_t kern2 = y_kern - kern1; + pos[idx].y_advance += kern1; + pos[skippy_iter.idx].y_advance += kern2; + pos[skippy_iter.idx].y_offset += kern2; + } - buffer->idx = skippy_iter.idx; + idx = skippy_iter.idx; } } diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-normalize-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-normalize-private.hh index 085d48511d0..085d48511d0 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-normalize-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-normalize-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-normalize.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-normalize.cc index 3fee809cf93..6531e1b215c 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-normalize.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-normalize.cc @@ -132,17 +132,19 @@ static inline unsigned int decompose (const hb_ot_shape_normalize_context_t *c, bool shortest, hb_codepoint_t ab) { hb_codepoint_t a, b, a_glyph, b_glyph; + hb_buffer_t * const buffer = c->buffer; + hb_font_t * const font = c->font; if (!c->decompose (c, ab, &a, &b) || - (b && !c->font->get_glyph (b, 0, &b_glyph))) + (b && !font->get_glyph (b, 0, &b_glyph))) return 0; - bool has_a = c->font->get_glyph (a, 0, &a_glyph); + bool has_a = font->get_glyph (a, 0, &a_glyph); if (shortest && has_a) { /* Output a and b */ - output_char (c->buffer, a, a_glyph); + output_char (buffer, a, a_glyph); if (likely (b)) { - output_char (c->buffer, b, b_glyph); + output_char (buffer, b, b_glyph); return 2; } return 1; @@ -151,16 +153,16 @@ decompose (const hb_ot_shape_normalize_context_t *c, bool shortest, hb_codepoint unsigned int ret; if ((ret = decompose (c, shortest, a))) { if (b) { - output_char (c->buffer, b, b_glyph); + output_char (buffer, b, b_glyph); return ret + 1; } return ret; } if (has_a) { - output_char (c->buffer, a, a_glyph); + output_char (buffer, a, a_glyph); if (likely (b)) { - output_char (c->buffer, b, b_glyph); + output_char (buffer, b, b_glyph); return 2; } return 1; @@ -214,34 +216,35 @@ static inline void handle_variation_selector_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end) { hb_buffer_t * const buffer = c->buffer; + hb_font_t * const font = c->font; for (; buffer->idx < end - 1;) { if (unlikely (buffer->unicode->is_variation_selector (buffer->cur(+1).codepoint))) { /* The next two lines are some ugly lines... But work. */ - if (c->font->get_glyph (buffer->cur().codepoint, buffer->cur(+1).codepoint, &buffer->cur().glyph_index())) + if (font->get_glyph (buffer->cur().codepoint, buffer->cur(+1).codepoint, &buffer->cur().glyph_index())) { buffer->replace_glyphs (2, 1, &buffer->cur().codepoint); } else { /* Just pass on the two characters separately, let GSUB do its magic. */ - set_glyph (buffer->cur(), c->font); + set_glyph (buffer->cur(), font); buffer->next_glyph (); - set_glyph (buffer->cur(), c->font); + set_glyph (buffer->cur(), font); buffer->next_glyph (); } /* Skip any further variation selectors. */ while (buffer->idx < end && unlikely (buffer->unicode->is_variation_selector (buffer->cur().codepoint))) { - set_glyph (buffer->cur(), c->font); + set_glyph (buffer->cur(), font); buffer->next_glyph (); } } else { - set_glyph (buffer->cur(), c->font); + set_glyph (buffer->cur(), font); buffer->next_glyph (); } } if (likely (buffer->idx < end)) { - set_glyph (buffer->cur(), c->font); + set_glyph (buffer->cur(), font); buffer->next_glyph (); } } diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-private.hh index 817147199fd..817147199fd 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape.cc index 4ed6b842071..63c36f936fb 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-shape.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-shape.cc @@ -290,16 +290,18 @@ hb_ot_mirror_chars (hb_ot_shape_context_t *c) if (HB_DIRECTION_IS_FORWARD (c->target_direction)) return; - hb_unicode_funcs_t *unicode = c->buffer->unicode; + hb_buffer_t *buffer = c->buffer; + hb_unicode_funcs_t *unicode = buffer->unicode; hb_mask_t rtlm_mask = c->plan->map.get_1_mask (HB_TAG ('r','t','l','m')); - unsigned int count = c->buffer->len; + unsigned int count = buffer->len; + hb_glyph_info_t *info = buffer->info; for (unsigned int i = 0; i < count; i++) { - hb_codepoint_t codepoint = unicode->mirroring (c->buffer->info[i].codepoint); - if (likely (codepoint == c->buffer->info[i].codepoint)) - c->buffer->info[i].mask |= rtlm_mask; + hb_codepoint_t codepoint = unicode->mirroring (info[i].codepoint); + if (likely (codepoint == info[i].codepoint)) + info[i].mask |= rtlm_mask; else - c->buffer->info[i].codepoint = codepoint; + info[i].codepoint = codepoint; } } @@ -307,12 +309,13 @@ static inline void hb_ot_shape_setup_masks (hb_ot_shape_context_t *c) { hb_ot_map_t *map = &c->plan->map; + hb_buffer_t *buffer = c->buffer; hb_mask_t global_mask = map->get_global_mask (); - c->buffer->reset_masks (global_mask); + buffer->reset_masks (global_mask); if (c->plan->shaper->setup_masks) - c->plan->shaper->setup_masks (c->plan, c->buffer, c->font); + c->plan->shaper->setup_masks (c->plan, buffer, c->font); for (unsigned int i = 0; i < c->num_user_features; i++) { @@ -320,7 +323,7 @@ hb_ot_shape_setup_masks (hb_ot_shape_context_t *c) if (!(feature->start == 0 && feature->end == (unsigned int)-1)) { unsigned int shift; hb_mask_t mask = map->get_mask (feature->tag, &shift); - c->buffer->set_masks (feature->value << shift, mask, feature->start, feature->end); + buffer->set_masks (feature->value << shift, mask, feature->start, feature->end); } } } @@ -338,46 +341,53 @@ static inline void hb_synthesize_glyph_classes (hb_ot_shape_context_t *c) { unsigned int count = c->buffer->len; + hb_glyph_info_t *info = c->buffer->info; for (unsigned int i = 0; i < count; i++) - c->buffer->info[i].glyph_props() = _hb_glyph_info_get_general_category (&c->buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK ? - HB_OT_LAYOUT_GLYPH_PROPS_MARK : - HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH; + _hb_glyph_info_set_glyph_props (&info[i], + _hb_glyph_info_get_general_category (&info[i]) + == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK ? + HB_OT_LAYOUT_GLYPH_PROPS_MARK : + HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH); } static inline void hb_ot_substitute_default (hb_ot_shape_context_t *c) { + hb_buffer_t *buffer = c->buffer; + if (c->plan->shaper->preprocess_text) - c->plan->shaper->preprocess_text (c->plan, c->buffer, c->font); + c->plan->shaper->preprocess_text (c->plan, buffer, c->font); hb_ot_mirror_chars (c); - HB_BUFFER_ALLOCATE_VAR (c->buffer, glyph_index); + HB_BUFFER_ALLOCATE_VAR (buffer, glyph_index); - _hb_ot_shape_normalize (c->plan, c->buffer, c->font); + _hb_ot_shape_normalize (c->plan, buffer, c->font); hb_ot_shape_setup_masks (c); /* This is unfortunate to go here, but necessary... */ if (!hb_ot_layout_has_positioning (c->face)) - _hb_ot_shape_fallback_position_recategorize_marks (c->plan, c->font, c->buffer); + _hb_ot_shape_fallback_position_recategorize_marks (c->plan, c->font, buffer); - hb_ot_map_glyphs_fast (c->buffer); + hb_ot_map_glyphs_fast (buffer); - HB_BUFFER_DEALLOCATE_VAR (c->buffer, glyph_index); + HB_BUFFER_DEALLOCATE_VAR (buffer, glyph_index); } static inline void hb_ot_substitute_complex (hb_ot_shape_context_t *c) { - hb_ot_layout_substitute_start (c->font, c->buffer); + hb_buffer_t *buffer = c->buffer; + + hb_ot_layout_substitute_start (c->font, buffer); if (!hb_ot_layout_has_glyph_classes (c->face)) hb_synthesize_glyph_classes (c); - c->plan->substitute (c->font, c->buffer); + c->plan->substitute (c->font, buffer); - hb_ot_layout_substitute_finish (c->font, c->buffer); + hb_ot_layout_substitute_finish (c->font, buffer); return; } @@ -408,7 +418,7 @@ zero_mark_widths_by_gdef (hb_buffer_t *buffer) { unsigned int count = buffer->len; for (unsigned int i = 0; i < count; i++) - if ((buffer->info[i].glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK)) + if (_hb_glyph_info_is_mark (&buffer->info[i])) { buffer->pos[i].x_advance = 0; buffer->pos[i].y_advance = 0; @@ -418,17 +428,20 @@ zero_mark_widths_by_gdef (hb_buffer_t *buffer) static inline void hb_ot_position_default (hb_ot_shape_context_t *c) { + hb_direction_t direction = c->buffer->props.direction; unsigned int count = c->buffer->len; + hb_glyph_info_t *info = c->buffer->info; + hb_glyph_position_t *pos = c->buffer->pos; for (unsigned int i = 0; i < count; i++) { - c->font->get_glyph_advance_for_direction (c->buffer->info[i].codepoint, - c->buffer->props.direction, - &c->buffer->pos[i].x_advance, - &c->buffer->pos[i].y_advance); - c->font->subtract_glyph_origin_for_direction (c->buffer->info[i].codepoint, - c->buffer->props.direction, - &c->buffer->pos[i].x_offset, - &c->buffer->pos[i].y_offset); + c->font->get_glyph_advance_for_direction (info[i].codepoint, + direction, + &pos[i].x_advance, + &pos[i].y_advance); + c->font->subtract_glyph_origin_for_direction (info[i].codepoint, + direction, + &pos[i].x_offset, + &pos[i].y_offset); } } @@ -460,22 +473,25 @@ hb_ot_position_complex (hb_ot_shape_context_t *c) if (hb_ot_layout_has_positioning (c->face)) { + hb_glyph_info_t *info = c->buffer->info; + hb_glyph_position_t *pos = c->buffer->pos; + /* Change glyph origin to what GPOS expects, apply GPOS, change it back. */ for (unsigned int i = 0; i < count; i++) { - c->font->add_glyph_origin_for_direction (c->buffer->info[i].codepoint, + c->font->add_glyph_origin_for_direction (info[i].codepoint, HB_DIRECTION_LTR, - &c->buffer->pos[i].x_offset, - &c->buffer->pos[i].y_offset); + &pos[i].x_offset, + &pos[i].y_offset); } c->plan->position (c->font, c->buffer); for (unsigned int i = 0; i < count; i++) { - c->font->subtract_glyph_origin_for_direction (c->buffer->info[i].codepoint, + c->font->subtract_glyph_origin_for_direction (info[i].codepoint, HB_DIRECTION_LTR, - &c->buffer->pos[i].x_offset, - &c->buffer->pos[i].y_offset); + &pos[i].x_offset, + &pos[i].y_offset); } ret = true; @@ -546,7 +562,7 @@ hb_ot_hide_default_ignorables (hb_ot_shape_context_t *c) unsigned int j = 0; for (unsigned int i = 0; i < count; i++) { - if (unlikely (!is_a_ligature (info[i]) && + if (unlikely (!_hb_glyph_info_ligated (&info[i]) && _hb_glyph_info_is_default_ignorable (&info[i]))) { if (space_status == SPACE_DONT_KNOW) @@ -582,8 +598,7 @@ hb_ot_shape_internal (hb_ot_shape_context_t *c) /* Save the original direction, we use it later. */ c->target_direction = c->buffer->props.direction; - HB_BUFFER_ALLOCATE_VAR (c->buffer, unicode_props0); - HB_BUFFER_ALLOCATE_VAR (c->buffer, unicode_props1); + _hb_buffer_allocate_unicode_vars (c->buffer); c->buffer->clear_output (); @@ -598,8 +613,7 @@ hb_ot_shape_internal (hb_ot_shape_context_t *c) hb_ot_hide_default_ignorables (c); - HB_BUFFER_DEALLOCATE_VAR (c->buffer, unicode_props1); - HB_BUFFER_DEALLOCATE_VAR (c->buffer, unicode_props0); + _hb_buffer_deallocate_unicode_vars (c->buffer); c->buffer->props.direction = c->target_direction; diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-tag.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-tag.cc index 91ebec76ee3..91ebec76ee3 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-tag.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-tag.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-tag.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-tag.h index 1bf12ab3c09..1bf12ab3c09 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot-tag.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot-tag.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot.h index 80739063991..80739063991 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ot.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ot.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-private.hh index 4152e275523..4152e275523 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-set-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-set-private.hh index ca2a07b7619..ca2a07b7619 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-set-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-set-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-set.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-set.cc index 59a0af46ed4..59a0af46ed4 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-set.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-set.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-set.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-set.h index bafdae96333..bafdae96333 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-set.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-set.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape-plan-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape-plan-private.hh index dd014e38d01..dd014e38d01 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape-plan-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape-plan-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape-plan.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape-plan.cc index b44a9e2ab77..b44a9e2ab77 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape-plan.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape-plan.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape-plan.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape-plan.h index 8f54552f90b..8f54552f90b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape-plan.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape-plan.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape.cc index c1b752405e1..c1b752405e1 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape.h index 10a35cb517e..10a35cb517e 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shape.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shape.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shaper-impl-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shaper-impl-private.hh index 7844081e95b..7844081e95b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shaper-impl-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shaper-impl-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shaper-list.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shaper-list.hh index b9c029e58f1..b9c029e58f1 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shaper-list.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shaper-list.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shaper-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shaper-private.hh index 29c4493943d..29c4493943d 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shaper-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shaper-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shaper.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shaper.cc index 44f718aa702..44f718aa702 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-shaper.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-shaper.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-tt-font.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-tt-font.cc index c503a404380..c503a404380 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-tt-font.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-tt-font.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ucdn.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ucdn.cc index 7d24559de67..7d24559de67 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-ucdn.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-ucdn.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-unicode-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-unicode-private.hh index dd4d00138e1..dd4d00138e1 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-unicode-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-unicode-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-unicode.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-unicode.cc index 5b44913bd35..5b44913bd35 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-unicode.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-unicode.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-unicode.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-unicode.h index 1c4e097b92d..1c4e097b92d 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-unicode.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-unicode.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-uniscribe.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-uniscribe.cc index 65a63f3be54..65a63f3be54 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-uniscribe.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-uniscribe.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-uniscribe.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-uniscribe.h index 51887c8794b..51887c8794b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-uniscribe.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-uniscribe.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-utf-private.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-utf-private.hh index b9a6519d28e..b9a6519d28e 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-utf-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-utf-private.hh diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-version.h.in b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-version.h.in index 43634f91ce8..43634f91ce8 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-version.h.in +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-version.h.in diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-warning.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-warning.cc index 4f1f65f5a21..4f1f65f5a21 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb-warning.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb-warning.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb.h b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb.h index c5a938a3818..c5a938a3818 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/hb.h +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/hb.h diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/main.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/main.cc index ff75237b23f..ff75237b23f 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/main.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/main.cc diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/test-buffer-serialize.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/test-buffer-serialize.cc index 827b0513b37..18c46e9524b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/test-buffer-serialize.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/test-buffer-serialize.cc @@ -34,7 +34,10 @@ #endif #ifdef HAVE_GLIB -#include <glib.h> +# include <glib.h> +# if !GLIB_CHECK_VERSION (2, 22, 0) +# define g_mapped_file_unref g_mapped_file_free +# endif #endif #include <stdlib.h> #include <stdio.h> diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/test-size-params.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/test-size-params.cc index 947b5669a14..35d9e3c8e25 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/test-size-params.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/test-size-params.cc @@ -32,7 +32,10 @@ #include "hb-ot.h" #ifdef HAVE_GLIB -#include <glib.h> +# include <glib.h> +# if !GLIB_CHECK_VERSION (2, 22, 0) +# define g_mapped_file_unref g_mapped_file_free +# endif #endif #include <stdlib.h> #include <stdio.h> diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/test-would-substitute.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/test-would-substitute.cc index 4731e265607..8ea87cdf397 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/test-would-substitute.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/test-would-substitute.cc @@ -32,7 +32,10 @@ #include "hb-ot.h" #ifdef HAVE_GLIB -#include <glib.h> +# include <glib.h> +# if !GLIB_CHECK_VERSION (2, 22, 0) +# define g_mapped_file_unref g_mapped_file_free +# endif #endif #include <stdlib.h> #include <stdio.h> diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/test.cc b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/test.cc index 1acb6ead70b..a8fe046f34c 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-0.9.22/src/test.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.23/src/test.cc @@ -31,7 +31,10 @@ #include "hb.h" #ifdef HAVE_GLIB -#include <glib.h> +# include <glib.h> +# if !GLIB_CHECK_VERSION (2, 22, 0) +# define g_mapped_file_unref g_mapped_file_free +# endif #endif #include <stdlib.h> #include <stdio.h> diff --git a/Build/source/libs/harfbuzz/hbtest.c b/Build/source/libs/harfbuzz/hbtest.c index eacf3c603cf..09f4d33e572 100644 --- a/Build/source/libs/harfbuzz/hbtest.c +++ b/Build/source/libs/harfbuzz/hbtest.c @@ -18,11 +18,15 @@ int main (int argc, char **argv) char icu_version[U_MAX_VERSION_STRING_LENGTH] = ""; int nMajor, nMinor, nBugFix; - printf ("%s: using HarfBuzz version %s\n", argv[0], hb_version_string ()); + printf ("%s: Compiled with HarfBuzz version %s; using %s\n", + argv[0], HB_VERSION_STRING, hb_version_string ()); u_getVersion(icuVersion); u_versionToString(icuVersion, icu_version); - printf ("%s: using ICU version %s\n", argv[0], icu_version); + printf ("%s: Compiled with ICU version %s; using %s\n", + argv[0], U_ICU_VERSION, icu_version); gr_engine_version(&nMajor, &nMinor, &nBugFix); - printf ("%s: using Graphite2 version %d.%d.%d\n", argv[0], nMajor, nMinor, nBugFix); + printf ("%s: Compiled with Graphite2 version %d.%d.%d; using %d.%d.%d\n", + argv[0], GR2_VERSION_MAJOR, GR2_VERSION_MINOR, GR2_VERSION_BUGFIX, + nMajor, nMinor, nBugFix); return 0; } diff --git a/Build/source/libs/harfbuzz/version.ac b/Build/source/libs/harfbuzz/version.ac index f02192a1d82..1e4e31b914b 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.22]) +m4_define([harfbuzz_version], [0.9.23]) |